如何更新父键空间的子文档?

时间:2015-01-14 06:54:41

标签: mongodb mongodb-query

我有一份如下文件:

{
    "_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

请问有什么建议吗?

1 个答案:

答案 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" } } }
);

未来的更新将正常运作