使用$set使用包含点(.)的键更新文档的值,MongoDB

使用$set使用包含点(.)的键更新文档的值,MongoDB,mongodb,Mongodb,我有一个非常基本的blog.posts集合,我想从中使用$set修饰符更新关键author.name的值。以下是该集合中的文档示例: { "_id" : ObjectId("5ca66e7d8a3bb6e58e0d85f4"), "s_id": "unique_post", "title" : "MongoDB is cool", "author.name" : "Terence" } 我想将author.name键的值从Tere

我有一个非常基本的blog.posts集合,我想从中使用$set修饰符更新关键author.name的值。以下是该集合中的文档示例:

{
        "_id" : ObjectId("5ca66e7d8a3bb6e58e0d85f4"),
        "s_id": "unique_post",
        "title" : "MongoDB is cool",
        "author.name" : "Terence"
}
我想将author.name键的值从Terence更改为Benjamin,这是我试图获得结果的查询:

db.blog.posts.update({"s_id": "unique_post"}, {"$set":{"author.name":"Benjamin"}})
问题是,当我执行此查询时,我会得到一个新的嵌套数据,如图所示:

{
        "_id" : ObjectId("5ca66e7d8a3bb6e58e0d85f4"),
        "title" : "MongoDB is cool",
        "author.name" : "Terence",
        "author" : {
                "name" : "Benjamin"
        }
}
我知道这是意料之中的,但我的问题是:如何修改文档中包含点的键的值? 请告诉我我是mongoDB的新手,如有任何其他提示,将不胜感激。

按dot。是字段名称中的受限字符。所以你不能有点。在字段名中。这就是它转换点的原因。将值转换为子文档


谢谢这个@Mani