当前位置: 首页 > 知识库问答 >
问题:

我能用点字符(.)吗对于Mongo DB中的字段名?

拓拔欣嘉
2023-03-14

我正在使用MongoDb存储JSON数据。我拥有的一个文档包含一个深度嵌套的JSON,其值如下所示:

......

"value-3.4": {
                  "submit-message": {
                     "enabled": "false"
                  },
                  "dlr-tlvs": {
                     "parse-value": "true",

                  }
               }
            }

...

我有一个使用“MongoDB”的node.js应用程序:“^3.5.3”,它连接到我的DB读取json数据,并尝试使用如下所示的方法将其推送到数据库。注意,datito是来自外部文件的json对象。

 try {
                                                     db.collection('config').insertOne(
                                                         datito
                                                     ).then(function(err) {
                                                      console.log(err);
                                                      // expected output: "Success!"
                                                    })
                                                  } catch (e) {
                                                     console.log(e);
                                                  }

问题是,当我尝试推送数据时,我得到一个错误,因为字段名包含一个“。从Mongo3.6开始,我读到了https://docs.mongodb.com/manual/reference/limits/#restrictions-on-field-names这应该不是问题。然而,npm中发布的最新版本似乎是3.5.3。

我还按照这些说明将Mongo更新到3.6https://docs.mongodb.com/v3.6/installation/,但这似乎没什么区别,因为我是从nodejs应用程序而不是从Mongo shell中推送数据的。有道理吗?

如果我在nodejs应用程序中混淆了mongodb版本和mongodb版本(4.2.3版本),你能告诉我吗?

当我在CLI中运行mongo-version时,我得到了:

MongoDB shell版本V4.2.3

但我的nodejs应用程序似乎使用的是3.5.3。这个假设是否正确,因此我应该将json的字段重命名为不包含“.”?

我很感激你的帮助。

谢谢

共有1个答案

狄英哲
2023-03-14

虽然文档中提到MongoDB(版本3.6以上)可以很好地使用包含点(.)的字段名,但不建议使用:

重要

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

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

来源

注意,它还指出,使用包含点(.)的字段名不受官方MongoDB驱动程序的支持,而您正在使用的正是官方MongoDB驱动程序之一,很可能这就是您在DB插入时出现错误的原因。

 类似资料:
  • 我已经搜索和尝试了许多答案,但我似乎无法让这个工作。我在MongoDB中有一个用户(db.users...)我试图在一个特定的文档中更新一个名为“角色”的字段。如果我执行: assert失败:需要对象错误:在printStackTrace(src/mongo/shell/utils.js:37:15)在doassert(src/mongo/shell/assert.js:6:5)在assert(s

  • 我通过将字符串转换为BSON来进行MongoDB查找。在进行转换之前,是否有办法确定我拥有的字符串是否是Mongo的有效ObjectID? 下面是我当前findByID函数的coffeescript。它工作得很好,但是如果我确定字符串不是ID,我希望通过不同的属性进行查找。

  • 问题内容: jshashtable状态: JavaScript的内置对象的确使用方括号表示属性来提供哈希表功能,前提是您的键是字符串或数字: 据我所知,键只是字符串,(因为数字无论如何都被强制转换为字符串)。我只想检查一下,确保上面所说的是假的(因为键不能是数字)。 ECMA标准是否对此做了任何说明。 还是实现特定于浏览器? 问题答案: JavaScript的内置对象确实使用属性的方括号表示法提供

  • 我不确定这样做是否合乎逻辑。这是我输入框的html代码。 这是我的火变函数 我只想在firechange函数中传递事件,而在fire change函数内部,我想从事件中获取输入字段名称,这样我就可以理解表单中的哪个输入字段触发了事件。预期的代码是这样的 我的理想要求是,在一个表单中有许多表单字段,我甚至不想在每个单独的表单字段中编写firechange函数。有没有什么通用的方法可以在特定表单的每个

  • 问题内容: 我想问一下如何更改密码字段中的字符,而这正是我想用星号代替的点? 我正在使用Java Jframe 问题答案: PasswordTextField.setEchoChar(’*’);