我正在尝试更新member_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"}] });
});
我收到以下错误:
uncaught exception: can't have . in field names [fields.shop]
我理解这个问题,但我找不到解决方案,所以我很感激我能得到的任何帮助。
答案 0 :(得分:9)
如果您的字段子文档中没有任何内容,则可以使用$set执行此操作,如果除了fields
之外还有db.members_copy.update(
{ "_id": myDoc._id},
{ "$set": { "fields.shop": [{"id": 319, "value": "Los Angeles"}] } }
);
字段,那么您应该使用{{3}}文档。
shop
但是你不能做的是将项目添加到子文档而不替换整个事物。因此,如果您想将bar
添加到存在db.members_copy.update(
{ "_id": myDoc._id},
{ "$set": {
"fields": {
"bar": "foo",
"shop": [{"id": 319, "value": "Los Angeles"}]
}
}
);
的位置,则需要执行此操作
{{1}}
以这种方式使用子文档只是一个危险。