未被捕的例外:不能有.在字段名称中

Rep*_*pox 7 mongodb mongodb-query

我正在尝试更新members_copy集合中的一组文档.

db.members_copy.find({"fields.shop.id": 321}).forEach(function(myDoc) {     
    db.members_copy.update({ "_id": myDoc._id}, { "fields.shop": [{"id": 319, "value": "Los Angeles"}] });
});
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

uncaught exception: can't have . in field names [fields.shop]
Run Code Online (Sandbox Code Playgroud)

我理解这个问题,但我找不到解决方案,所以我很感激我能得到的任何帮助.

Nei*_*unn 10

如果您的字段子文档中没有任何内容,则可以使用$ set执行此操作,如果除了fields文档中的字段之外还有其他内容,则应该使用$ set.

db.members_copy.update(
    { "_id": myDoc._id},
    { "$set": { "fields.shop": [{"id": 319, "value": "Los Angeles"}] } }
);
Run Code Online (Sandbox Code Playgroud)

但是你不能做的是将项目添加到子文档而不替换整个文档.因此,如果您想添加shop存在的位置,则bar需要执行此操作

db.members_copy.update(
    { "_id": myDoc._id},
    { "$set": { 
        "fields": {
            "bar": "foo",
            "shop": [{"id": 319, "value": "Los Angeles"}]
         }
    }
);
Run Code Online (Sandbox Code Playgroud)

以这种方式使用子文档只是一种危险.