在Mongo CLI中使用修饰符运算符进行更新但不能使用mongoose从node.js代码进行更新

Ada*_*son 5 mongoose mongodb node.js

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

db.users.update({昵称: 'mcoalson'},{ "$ addToSet":{room_ref: "B"}})db.users.update({昵称: 'mcoalson'},{ "$ addToSet":{ room_ref: "C"}})db.users.findOne({昵称: 'mcoalson'}){ "_id":的ObjectId( "4de5e9e982e9556c2a000003"), "昵称": "mcoalson", "room_ref":[ "一" ,"d","b","c"]}

但是,在同一文档的node.js中执行完全相同的操作没有结果.

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

"room_ref":["a","d","b","c"]

显然,"b"未被删除,并且未添加"f".我已经尝试了所有可以想到的引用场景,我能想到却没有任何变化.我可以使用node.js代码中的find()和findOne()并使用相同的凭据,任何建议?

Ric*_*asi 0

抱歉耽搁了。

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)
    })
})
Run Code Online (Sandbox Code Playgroud)