5

使用 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”),“昵称”:“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"}});

“room_ref”:[“a”、“d”、“b”、“c”]

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

4

2 回答 2

0

我遇到了同样的问题,最终绕过了猫鼬并使用了底层驱动程序,其中没有出现问题。

所以而不是

db.User.update(...)

利用:

db.User.collection.update(...)

希望有帮助。

于 2011-12-09T11:13:07.480 回答
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)
    })
})
于 2011-11-19T16:19:15.813 回答