【问题标题】:Why do I have a fail validation with mongodb?为什么我使用 mongodb 验证失败?
【发布时间】:2020-04-07 17:06:51
【问题描述】:

我是 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

感谢您的回答

【问题讨论】:

  • 有时 int / long 之间可能会有些混淆。尝试使用 bsontype 'number' 而不是 'int',它将包含所有类型的数字(int/long/double)docs.mongodb.com/manual/reference/operator/query/jsonSchema/…
  • 感谢您的评论,我刚刚尝试过,它返回相同的错误
  • 我尝试删除 order 属性以查看是否是问题所在,但插入时不需要顺序也是一样的,我认为这是我的对象数组,但我没有错误: / 这是验证对象数组的正确方法吗?

标签: javascript arrays json mongodb object


【解决方案1】:

好的,我得到了解决方案,问题是附加规则属性。因此,如果它为 false,则必须在插入数据之前添加 _id 属性,因为它会将 _id 视为附加属性。

bsonType: "int" 也会出错,所以使用数字。

所以有了这个验证器规则,我可以插入我的数据 ->

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"
                            }
                        }
                    }
                }
            }
        }
    }
});

【讨论】:

    猜你喜欢
    • 2010-11-14
    • 1970-01-01
    • 1970-01-01
    • 2016-11-06
    • 2021-03-10
    • 1970-01-01
    • 2012-08-21
    • 2018-06-10
    • 1970-01-01
    相关资源
    最近更新 更多