我有一份如下文件:
{
"_id" : ObjectId("54b60ee28115386561cda04b"),
"a b" : "{c:d}",
}
我需要更新' .c来评估' e。试过下面的查询
db.test.update({"_id" : ObjectId("54b60ee28115386561cda04b")}, {$set:{'a b.c':'e'}});
但得到错误:
LEFT_SUBFIELD only supports Object: a b not: 2
请问有什么建议吗?
答案 0 :(得分:1)
在键名中有一个空格没有错(除了它看起来很糟糕而且不是一个好习惯)。因此,您可以毫无问题地修改正确形成的文档。
{
"_id" : ObjectId("54b60ee28115386561cda04b"),
"a b" : { "c": "d" }
}
并更新:
db.test.update(
{ "_id": ObjectId("54b60ee28115386561cda04b") },
{ "$set": { "a b.c": "e" } }
);
但是你的问题是“a b”的内容是一个字符串。所以没有“c”子属性可供访问。
{
"_id" : ObjectId("54b60ee28115386561cda04b"),
"a b" : "{c:d}",
}
更正文档以包含嵌套对象:
db.test.update(
{ "_id": ObjectId("54b60ee28115386561cda04b") },
{ "$set": { "a b": { "c": "e" } } }
);
未来的更新将正常运作