首页 > 解决方案 > 我可以在 Mongo DB 中使用点字符 (.) 作为字段名称吗?

问题描述

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

……

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

                  }
               }
            }

...

我有一个使用 "mongodb": "^3.5.3" 的 node.js 应用程序,它连接到我的数据库读取、json 数据,并尝试使用类似以下的方式将其推送到数据库。请注意,datito 是来自外部文件的 json 对象。

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

问题是当我尝试推送数据时,我得到一个错误,因为字段名称包含一个“。” 我从 Mongo 3.6 开始阅读,https: //docs.mongodb.com/manual/reference/limits/#Restrictions-on-Field-Names这应该不是问题。不过npm上发布的最新版本好像是3.5.3。

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

如果我对我的 nodejs 应用程序中的 mongodb 版本与我拥有 4.2.3 的 Mongo DB 版本感到困惑,您能否告知一下?

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

MongoDB shell 版本 v4.2.3

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

我感谢您的帮助。

谢谢

标签: node.jsmongodb

解决方案


虽然文档中指出 MongoDB(3.6 版以上)适用于包含点(。)的字段名称,但不建议这样做:

重要的

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

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

资源

请注意,它还指出,官方 MongoDB 驱动程序不支持使用包含点 (.) 的字段名称,其中之一就是您正在使用的驱动程序,很可能这就是您在插入数据库时​​遇到错误的原因。


推荐阅读