更新不适用于空值?

时间:2014-02-11 17:44:04

标签: mongodb mongodb-query

我有以下数据:

{   
    title: "whatever"
    answers:[
      {
       "question_id" : 11294,
       "sub_id" : null,
       "_id" : ObjectId("52f90f68bab16dd8595d453e"),
       "values" : [
        "Po "
       ]
      }
    ]
}

我正在尝试更新它:

db.participants.update(
    {
        "answers.question_id": 11294,
        "answers.sub_id": null
    },
    {
        $set:
        {
            "answers.$.question": 'test'
        }

    },
    false,
    true
);

但它不起作用(记录未更新)。如果有sub_idanswers.sub_id的值,则更新正常。如何编写此更新,以便当它们具有answers.sub_id的值且answers.sub_id为空时,它将更新记录?

更新:

我在运行查询之前创建了这个索引,然后在以下后删除它:

db.participants.ensureIndex({"answers.question_id": 1, "answers.sub_id": 1});

1 个答案:

答案 0 :(得分:1)

您应该尝试$elemMatch

db.participants.update(
    {
        answers: {$elemMatch: {"question_id": 11294, "sub_id": null}}
    },
    {
        $set:
        {
            "answers.$.question": 'test'
        }

    },
    false,
    true
);

“答案”字段是一个数组,在您的示例中,不是子文档。希望这会有所帮助。