我的数据是这样的
{
"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为ID的数组中删除特定元素。我有这样的更新,但仍然没有更新我的数据。我看过其他帖子,并尝试了不同版本的更新,但无济于事。
list.findOneAndUpdate({name:ln},{$pull : {items:{_id:req.body.id}}},{useFindAndModify:false},
function(err,result){
if(!err){
result.save()
res.redirect("/"+listname)
}
}
)
为了执行此操作,mongo DB需要找到需要从对象中删除的正确_id
。因此,您无需将String
值仅解析为_id
,只需将其转换为ObjectId
。
您可以使用以下命令将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})
这是运行上述查询后得到的结果。
根据语法,您需要在双引号中同时指定name
和value
字符串。
list.findOneAndUpdate({"name":"ln"},{$pull : {"items":{"_id":req.body.id}}}, {useFindAndModify:false},
function(err,result){
if(!err){
result.save()
res.redirect("/"+listname)
}
}
}