5

CLI を使用して Mongo インスタンスに接続すると、update 修飾子演算子を問題なく使用できます。

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" : [ "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

遅れて申し訳ありません。

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 に答える
0

私は同じ問題を抱えていましたが、結局マングースをバイパスして、問題が発生しなかった基礎となるドライバーを使用しました。

だから代わりに

db.User.update(...)

使用する:

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

それが役立つことを願っています。

于 2011-12-09T11:13:07.480 に答える