MongoDB继续从当前文档中提取

时间:2014-01-09 11:05:04

标签: mongodb

例如,我有这样的结构:

> 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})

所以我无法继续更新上一个更新文档。

如何解决这个问题?

2 个答案:

答案 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}}
    )
}