例如,我有这样的结构:
> db.test.find().pretty()
{
"_id" : ObjectId("52ce7b49074b355233e6e2fb"),
"gifts" : [
{
"gid" : "lala",
"reserv" : [
555,
666
]
},
{
"gid" : "bebe",
"reserv" : [
888,
555
]
}
],
"uid" : 123
}
我想拉" 555"来自所有" reserv"并且来自" uid"的所有文件" reserv"的内容:
1)此查询首先找到555并将其拉出,但文档中的第二个555不拉:
db.test.update({uid : 123, 'gifts.reserv': 555}, {'$pull' : {'gifts.$.reserv' : 555}}, {multi : true})
2)此查询没有任何作用:
db.test.update({uid : 123, 'gifts.reserv': 555}, {'$pull' : {'gifts.reserv' : 555}}, {multi : true})
所以我无法继续更新上一个更新文档。
如何解决这个问题?
答案 0 :(得分:1)
我担心这是不可能的。你能做的最好的事情是:
reserv
555
update
+ pull
这么多次。答案 1 :(得分:0)
multi在这里没有任何效果,因为将multi设置为true将查看多个文档,但是在多个子文档中出现相同的值。所以你需要操纵子文档。
所以你应该尝试这样的事情。
while(db.test.find({uid : 123,'gifts.reserv':555}).count()!=0)
{
db.test.update(
{uid : 123,'gifts.reserv':555},
{$pull:{'gifts.$.reserv':555}}
)
}