如何更新父键有space的子文档?

How to update sub document whose parent key has space in?

我有如下文件:

{
    "_id" : ObjectId("54b60ee28115386561cda04b"),
    "a b" : "{c:d}",
}

我需要将 'a b'.c 更新为值 'e'。试过下面的查询

db.test.update({"_id" : ObjectId("54b60ee28115386561cda04b")}, {$set:{'a b.c':'e'}});

但出现错误:

LEFT_SUBFIELD only supports Object: a b not: 2

有什么建议吗?

在键名中使用 space 没有任何问题(除了它看起来很糟糕而且不是一个好的做法)。因此,您可以毫无问题地修改格式正确的文档。

{
    "_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" } } }
);

以后的更新将正常运行