首页 > 解决方案 > findOneAndUpdate 用于在猫鼬中更新数据库

问题描述

我的数据是这样的

{
        "items" : [
                {
                        "_id" : ObjectId("5ec05df7755a8f0c4c7945bd"),
                        "name" : "play",
                        "__v" : 0
                },
                {
                        "_id" : ObjectId("5ec05df7755a8f0c4c7945be"),
                        "name" : "eat",
                        "__v" : 0
                },
                {
                        "_id" : ObjectId("5ec05df7755a8f0c4c7945bf"),
                        "name" : "study",
                        "__v" : 0
                }

        ],
        "name" : "go",
        "__v" : 2
}

我想从具有 id 的数组中删除特定元素。我有这样的更新,但我的数据仍然没有更新。我看过其他帖子并尝试了不同版本的更新,但没有任何帮助。

list.findOneAndUpdate({name:ln},{$pull : {items:{_id:req.body.id}}},{useFindAndModify:false},
      function(err,result){
      if(!err){
        result.save()
        res.redirect("/"+listname)
      }
    }

)

标签: node.jsmongodb

解决方案


为了执行此操作,mongo DB 需要找到_id您需要从对象中删除的正确内容。因此,您只需将其转换String为._idObjectId

您可以使用以下命令将String值转换为ObjectId

var mongoose = require('mongoose');

list.findOneAndUpdate({name:ln},{$pull : {items:{_id:mongoose.Types.ObjectId(req.body.id)}}},{useFindAndModify:false},
      function(err,result){
      if(!err){
        result.save()
        res.redirect("/"+listname)
      }
    }

这是我尝试过的查询。

 db.getCollection('list').findOneAndUpdate({name:'go'},{$pull : {items:{_id:ObjectId('5ec05df7755a8f0c4c7945bd')}}},{useFindAndModify:false})

这是运行上述查询后得到的结果。

在此处输入图像描述


推荐阅读