node.js - 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)
}
}
)
解决方案
为了执行此操作,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})
这是运行上述查询后得到的结果。
推荐阅读
- sudoers - 允许从 nis 共享的组使用 sudo
- sql - Presto sql“值不能转换为时间戳”
- react-native-maps - 不能使用 MapView 组件中的 animateCamera 方法
- testing - Jasmine:在另一个类中测试静态函数
- c++ - 只要用户愿意,如何继续阅读输入?
- django - 如何设置需要虚拟环境的多个 Django 项目的服务器?
- react-native - 反应本机自定义片段不起作用
- airflow - catchup=false 的意外 Dag 计划
- java - 无法在 Java8 中将悉尼转换为布里斯班 LocalDateTime
- ruby-on-rails - 如何使定义影响 rails-webpacker-managed js 中的全局范围?