我可以为一个简单的文档做$pull
:
> db.users.find();
{ "_id" : 4, "sessions" : [ { "sid" : "foo1" }, { "sid" : "bar" } ] }
> db.users.update({}, {"$pull": {sessions: {"sid" : "bar"}}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
但如果我有关于会话的更多信息:
> db.users.insert({_id:5, sessions: [ { sid: "foo"}, {sid:"bar", ssid:"test"}]});
> db.users.find();
{ "_id" : 4, "sessions" : [ { "sid" : "foo1" } ] }
{ "_id" : 5, "sessions" : [ { "sid" : "foo" }, { "sid" : "bar", "ssid" : "test" } ] }
> db.users.update({}, {"$pull": {sessions: {"sid" : "bar"}}});
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 0 })
然后$pull
失败。
答案 0 :(得分:1)
您的$pull
是正确的,但您需要为multi: true
添加update
选项以应用于这两个文档:
db.users.update({}, {"$pull": {sessions: {"sid" : "bar"}}}, {multi: true});