如果没有包含数组的相应查询字段,则无法应用位置运算符

时间:2014-11-21 15:23:55

标签: mongodb mongodb-query

我有以下文件:

{ "id" : "1",
"name": "Paul",
"a": { "b" : [{"name" : "laura", "lastname" : "Palmer"}]}
}

现在我想更新b中的每个姓氏。

我试过了:

    db.organizations.update({"name" : "Paul", "a.b" : {$exists: true}},
{ "$set" : {"a.b.$.lastname" : "no_lastname"}});

但我明白了: 如果没有包含数组的相应查询字段,则无法应用位置运算符。

任何人都知道我应该做什么?

1 个答案:

答案 0 :(得分:2)

您可以在mongo shell中使用cursor.forEach()游标方法来实现此目的:

db.organizations.find({"name" : "Paul", "a.b" : {$exists: true}}).forEach(function(doc) {
    array = doc.a.b; 
    array.forEach(function(elem) {
        elem.lastname="no_lastname"
    }); 
    db.organizations.update({_id:doc._id}, {$set:{"a.b":array}}); 
})