2014-02-11 3 views
0

У меня есть данные, как следующее:Обновление не работает для нулевых значений?

{ 
    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_id и answers.sub_id, то обновление работает нормально. Как я могу написать это обновление, чтобы оно обновляло записи, когда они имеют значение для answers.sub_id и когда answers.sub_id имеет значение null?

UPDATE:

Я создаю этот показатель прямо перед тем, как выполнить запрос, а затем удалить его после:

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

Запрос выглядит корректно для меня. Также протестировали его на моей машине (mongodb 2.5.4). – mnemosyn

+0

oh weird .. и вы определенно протестированы с нулевыми значениями для 'sub_id'? –

+0

Похоже, я бегу '2.4.1' Интересно, будет ли это иметь какое-то значение? –

ответ

1

Вы должны попробовать $elemMatch:

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

    }, 
    false, 
    true 
); 

The "ответы" поле это массив, в вашем примере, а не субдокумент. Надеюсь это поможет.

Смежные вопросы