javascript - 为什么我使用 mongodb 验证失败?
问题描述
我是 mongodb 的新手,我已阅读文档,并尝试插入带有其他文档的引用 ID 的文档页面,但验证失败。这是我的模式验证规则:
db.createCollection("page", {
capped: true,
size: 4500000000,
max: 6,
validator: {
$jsonSchema: {
bsonType: "object",
required: [ "title", "url", "elements" ],
additionalProperties: false,
properties: {
title: {
bsonType: "object",
required: [ "content_id" ],
properties: {
content_id: {
bsonType: "objectId"
}
}
},
url: {
bsonType: "string"
},
elements: {
bsonType: "array",
items: {
bsonType: "object",
required: [ "order" , "element_id" ],
properties: {
order: {
bsonType: "int"
},
element_id: {
bsonType: "objectId"
}
}
}
}
}
}
}
});
这就是我尝试插入的内容(我在变量中添加了 futur id 对象和变量内容,并且文档已经有了我需要的 id)
var page1 = ObjectId();
db.page.insertOne(
{
"_id": page1,
"title": {
"content_id": content5
},
"url": "/home",
"elements": [
{
"order": 1,
"element_id": element1
},
{
"order": 2,
"element_id": element2
},
{
"order": 3,
"element_id": element3
},
{
"order": 4,
"element_id": element4
}
]
}
);
请问我为什么会出现这个错误?我不明白问题是什么,这个模式是否适合我要插入的内容?
2020-04-07T18:55:35.513+0200 E QUERY [js] WriteError({
"index" : 0,
"code" : 121,
"errmsg" : "Document failed validation",
"op" : {
"_id" : ObjectId("5e8c72698d808f037e6adede"),
"title" : {
"content_id" : ObjectId("5e8c72128d808f037e6aded6")
},
"url" : "/home",
"elements" : [
{
"order" : 1,
"element_id" : ObjectId("5e8c724d8d808f037e6adeda")
},
{
"order" : 2,
"element_id" : ObjectId("5e8c724d8d808f037e6adedb")
},
{
"order" : 3,
"element_id" : ObjectId("5e8c724d8d808f037e6adedc")
},
{
"order" : 4,
"element_id" : ObjectId("5e8c724d8d808f037e6adedd")
}
]
}
}) :
WriteError({
"index" : 0,
"code" : 121,
"errmsg" : "Document failed validation",
"op" : {
"_id" : ObjectId("5e8c72698d808f037e6adede"),
"title" : {
"content_id" : ObjectId("5e8c72128d808f037e6aded6")
},
"url" : "/home",
"elements" : [
{
"order" : 1,
"element_id" : ObjectId("5e8c724d8d808f037e6adeda")
},
{
"order" : 2,
"element_id" : ObjectId("5e8c724d8d808f037e6adedb")
},
{
"order" : 3,
"element_id" : ObjectId("5e8c724d8d808f037e6adedc")
},
{
"order" : 4,
"element_id" : ObjectId("5e8c724d8d808f037e6adedd")
}
]
}
})
WriteError@src/mongo/shell/bulk_api.js:458:48
mergeBatchResults@src/mongo/shell/bulk_api.js:855:49
executeBatch@src/mongo/shell/bulk_api.js:919:13
Bulk/this.execute@src/mongo/shell/bulk_api.js:1163:21
DBCollection.prototype.insertOne@src/mongo/shell/crud_api.js:264:9
@(shell):1:1
谢谢您的回答
解决方案
好的,我得到了解决方案,问题是附加规则属性。因此,如果它为 false,则必须在插入数据之前添加 _id 属性,因为它将 _id 视为附加属性。
bsonType: "int" 也会出错,所以使用 number。
所以有了这个验证器规则,我可以插入我的数据->
db.createCollection("page", {
capped: true,
size: 4500000000,
max: 6,
validator: {
$jsonSchema: {
bsonType: "object",
required: [ "_id", "title", "url", "elements" ],
additionalProperties: false,
properties: {
_id: {
bsonType: "objectId"
},
title: {
bsonType: "object",
required: [ "content_id" ],
properties: {
content_id: {
bsonType: "objectId"
}
}
},
url: {
bsonType: "string"
},
elements: {
bsonType: "array",
items: {
bsonType: "object",
required: [ "order" , "element_id" ],
properties: {
order: {
bsonType: "number"
},
element_id: {
bsonType: "objectId"
}
}
}
}
}
}
}
});
推荐阅读
- r - 如何将不均匀的数据框与真实数据合并
- php - Yii2 将 3 个不同的表链接在一起,并在其中一个字段中使用一个字段
- hive - Hive 中的操作
- r - Subset using minimum number of values positioned around maximum value
- jquery - 在递归函数上调用的自定义函数不会再次调用自身。为什么?
- python - 如何使用正则表达式替换/删除这些类型的日期,或者它们是最好的方法吗?
- php - 为什么我的 PHP 登录系统中不断出现错误 500
- sql - Sql 行计数选择 - MS SQL
- git - 当另一个分支合并到一个分支中时,如何找到在一个分支中更改的文件(忽略来自合并分支的更改)?
- java - 使用 JAVA 在 Outlook 客户端中以编程方式设置签名