提问者:小点点

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


我正在使用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个答案

匿名用户

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

重要

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

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

来源

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