我是MongoDB和NodeJS的新手,
当我尝试使用数据类型,字符串,整数,日期和bool创建JsonSchema时,会创建它,但是在插入数据时总是抛出错误作为文档验证错误,因此我将一种数据类型的bsonType更改为number ,然后它开始创建收集记录,但是观察到它是以Double数据类型存储的,我在stackoverflow中的某个地方读取了它仅以这种方式存储的信息,但是我的问题是这是为什么呢?为什么在创建JSONSCHEMA时不会引发错误,但在数据插入时会引发错误?
此外,如果我们有嵌套对象,比如说,以Address作为嵌套对象的Customer对象,则主对象的int / number值存储为Double,而在地址对象的pincode中存储为Int32。这也很令人困惑。这些对象之间有什么区别,但是架构的结构是相同的。
还有哪些其他方法可以实现MongoDB并拥有经过验证的正确模式。
>
db.getCollectionInfos({name:"companysInt1s1"})
[
{
"name" : "companysInt1s1",
"type" : "collection",
"options" : {
"validator" : {
"$jsonSchema" : {
"bsonType" : "object",
"required" : [
"tin"
],
"properties" : {
"tin" : {
"bsonType" : "int",
"minLength" : 2,
"maxLength" : 11,
"description" : "must be a string and is not required, should be 11 characters length"
}
}
}
}
},
"info" : {
"readOnly" : false,
"uuid" : UUID("27cba650-7bd3-4930-8d3e-7e6cbbf517db")
},
"idIndex" : {
"v" : 2,
"key" : {
"_id" : 1
},
"name" : "_id_",
"ns" : "invoice.companysInt1s1"
}
}
]
> db.companysInt1s1.insertOne({tin:22222})
2019-02-14T15:04:28.712+0530 E QUERY [js] WriteError: Document failed validation :
WriteError({
"index" : 0,
"code" : 121,
"errmsg" : "Document failed validation",
"op" : {
"_id" : ObjectId("5c653624e382c2ec16c16893"),
"tin" : 22222
}
})
WriteError@src/mongo/shell/bulk_api.js:461:48
Bulk/mergeBatchResults@src/mongo/shell/bulk_api.js:841:49
Bulk/executeBatch@src/mongo/shell/bulk_api.js:906:13
Bulk/this.execute@src/mongo/shell/bulk_api.js:1150:21
DBCollection.prototype.insertOne@src/mongo/shell/crud_api.js:252:9
@(shell):1:1
我应该丢失某些内容或任何其他文档吗?感谢您的指导...
答案 0 :(得分:1)
您需要插入为NumberInt
。
运行此命令时
db.companysInt1s1.insertOne({tin:22222})
您实际上是在插入tin
作为浮点数。
所以正确的方法是
db.companysInt1s1.insertOne({tin: NumberInt(22222) })