mongodb - 在 Mongo CLI 中使用修饰符运算符更新有效,但在使用 mongoose 的 node.js 代码中无效

标签 mongodb node.js mongoose

使用 CLI 连接到我们的 Mongo 实例,您可以很好地使用更新修饰符运算符:

db.users.update({nickname: 'mcoalson'}, { "$addToSet" : { room_ref : "b"}}) db.users.update({nickname: 'mcoalson'}, { "$addToSet" : { room_ref : "c"}}) db.users.findOne({nickname: 'mcoalson'}) { "_id" : ObjectId("4de5e9e982e9556c2a000003"), "nickname" : "mcoalson", "room_ref" : [ "a", "d", "b", "c" ] }

但是在同一文档的 node.js 中做完全相同的事情没有结果。

db.User.update({'nickname': 'mcoalson'}, {"$pullAll": {'room_ref': ["b"]}});
db.User.update({'nickname': 'mcoalson'}, {"$addToSet": {'room_ref': "f"}});

“房间引用”:[ “一个”, "d", “乙”, “C” ]

很明显,“b”没有被删除,“f”也没有被添加。我已经尝试了所有我能想到的可能的报价方案,但没有任何改变。我可以使用 node.js 代码中的 find() 和 findOne() 并使用相同的凭据,有什么建议吗?

最佳答案

抱歉耽搁了。

mongo CLI 是同步的,node.js 是异步的。您是在使用发布的代码,还是有适当的回调?您的测试应如下所示:

db.User.update({'nickname': 'mcoalson'}, {"$pullAll": {'room_ref': ["b"]}}, function(){
    db.User.findOne({'nickname': 'mcoalson'}, function(user){
        console.log('changed user:', user)
    })
})

关于mongodb - 在 Mongo CLI 中使用修饰符运算符更新有效,但在使用 mongoose 的 node.js 代码中无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6210752/

相关文章:

node.js - NodeJS,获取路由内登录用户的用户名

javascript - 在 Jade/Express 中迭代数组有限制吗?

java - JBPM - 无 SQL 集成

mongodb - Golang使用MongoDB报告 "context deadline exceeded"

mongodb - 使用 MongoDB 的 Grails 中的内存泄漏

node.js - Jest 检查设置是对还是错

node.js - 使用 Node.js 导入/导出 MongoDB

node.js - 如何在 mongodb 中 insertMany 和更新重复项?

javascript - $lookup 中日期的时差

mongodb - 蒙戈 : Using $dayOfWeek in a $match clause when query has also a $groupy