使用$ set通过包含点(。),MongoDB

时间:2019-04-04 21:10:30

标签: mongodb


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

{
        "_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的新手,任何其他提示将不胜感激。

1 个答案:

答案 0 :(得分:1)

根据MongoDB documentation点(。)是字段名称中的受限字符。因此,字段名称中不能包含点号(。)。这就是它将dot(。)值转换为子文档的原因。

enter image description here