我有一个包含以下文档的集合:
{
title: "whatever",
answers: [
{id: 10, question: ObjectId("54380350a52147000aad4e9b")},
{id: 13, question: ObjectId("54380350a52147000aad4e9c")},
{id: 33}
]
}
我尝试使用以下命令取消设置question
属性:
db.participants.update({}, {$unset: {"answers.question": ""}}, {upsert: false, multi:true} )
和
db.participants.update({}, {$unset: {"answers.question": 1}}, {upsert: false, multi:true} )
这两个都在完成时吐出:WriteResult({ "nMatched" : 628795, "nUpserted" : 0, "nModified" : 0 })
,但没有更新文档(如消息所示)。知道为什么我的更新不起作用吗?
答案 0 :(得分:2)
您的更新无效,因为answers
是一个数组。所以你应该使用位置运算符:
db.participants.update({ 'answers.question': { $exists: true } }, { $unset: { 'answers.$.question': '' } }, { upsert: false, multi: true });
但是它只更新数组中的一个项目。这是MongoDB的限制,请参阅SERVER-1243。
您可以使用forEach
遍历数组的项目:
db.eval(function () {
db.participants.find({ 'answers.question': { $exists: true } }).forEach(function (participant) {
participant.answers.forEach(function (answer) {
delete answer.question;
});
db.participants.update({ _id: participant._id }, { $set: { answers: participant.answers } });
});
});