首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在MongoDB的嵌入式文档中更新以美元开头的字段?

如何在MongoDB的嵌入式文档中更新以美元开头的字段?
EN

Stack Overflow用户
提问于 2021-04-28 23:29:32
回答 1查看 165关注 0票数 1

我在一个集合中的MongoDB中有一个文档,该文档有一个字段x,该字段的值是一个嵌入式文档,创建方式如下:

代码语言:javascript
复制
> db.c.insert({_id: 1, x: {$a: 2, b: 3}})
WriteResult({ "nInserted" : 1 })
> db.c.findOne({_id: 1})
{ "_id" : 1, "x" : { "$a" : 2, "b" : 3 } }

注意,在嵌入的文档中有一个以美元($a)开头的字段和一个不以美元(b)开头的字段。我可以在没有dolar的情况下毫无问题地更新字段:

代码语言:javascript
复制
> db.c.updateOne({_id: 1}, {$set: {"x.b": 30}})
{ "acknowledged" : true, "matchedCount" : 1, "modifiedCount" : 1 }
> db.c.findOne({_id: 1})
{ "_id" : 1, "x" : { "$a" : 2, "b" : 30 } }

但是,如果我尝试以相同的方式更新以美元开头的字段,则会得到一个错误

代码语言:javascript
复制
> db.c.updateOne({_id: 1}, {$set: {"x.$a": 20}})
WriteError({
    "index" : 0,
    "code" : 52,
    "errmsg" : "The dollar ($) prefixed field '$a' in 'x.$a' is not valid for storage.",
    "op" : {
        "q" : {
            "_id" : 1
        },
        "u" : {
            "$set" : {
                "x.$a" : 20
            }
        },
        "multi" : false,
        "upsert" : false
    }
})

因此,如何在嵌入式文档中更新以美元开头的字段?

我使用的是MongoDB 4.4.1,以防你需要知道。

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2021-04-28 23:49:58

无法更新以$开头字段,请参阅mongodb字段名称说明,

  • 字段名称不能包含null character.
  • Top-level字段名称不能以美元符号($)字符开头。否则,从MongoDB 3.6开始,服务器允许存储包含点的字段名称(即.)和美元符号(即$)。

重要

对于字段名包含这些字符的文档,MongoDB查询语言并不总是有意义地表达查询(请参见SERVER-30575)。

在查询语言中添加支持之前,请使用$和。不推荐使用字段名称,官方的MongoDB驱动程序也不支持。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67303220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档