使用 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/