node.js - 我可以在 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 字段重命名为不包含“。”?
我感谢您的帮助。
谢谢
解决方案
虽然文档中指出 MongoDB(3.6 版以上)适用于包含点(。)的字段名称,但不建议这样做:
重要的
MongoDB 查询语言不能总是有意义地表达对字段名称包含这些字符的文档的查询(请参阅 SERVER-30575)。
在查询语言中添加支持之前,使用 $ 和 . 不推荐使用 in 字段名称,官方 MongoDB 驱动程序也不支持。
请注意,它还指出,官方 MongoDB 驱动程序不支持使用包含点 (.) 的字段名称,其中之一就是您正在使用的驱动程序,很可能这就是您在插入数据库时遇到错误的原因。
推荐阅读
- regex - 正则表达式:提取由特定单词分隔的单词
- flutter - 如何使用不迁移到空安全的包进行构建?
- c# - MciSendString 别名重用
- .net - 更新到引导程序 5 MVC 后在 WebGrease.dll 中引发异常
- php - php ajax一次又一次地获取相同的文件html
- gradle - Gradle 7 迁移:无法应用 PublishPlugin(maven-publish):当项目已经评估时无法运行 afterEvaluate
- android - Flutter:android不允许应用在外部存储中创建新文件夹来保存文件?
- maven - Apache flink force-shading 依赖的源码
- vue.js - Vue JS Checkbox 全选 使用嵌套数组
- sql - 设置一个局部变量并在整个查询批处理中使用?