首页 > 解决方案 > 如何纠正 Mongodb 中的文档验证失败?

问题描述

我创建了以下集合(创建成功)

db.createCollection("Company", { "validator": { "$jsonSchema": {
    "bsonType":"object",
    "required":["city_name","city","street_name","building_number","budget","Department"],
    "properties":{ "city_name":{ "bsonType":"string",
                            "description":"name of city" },
                   "city":{ "bsonType":"string",
                            "description":"City" },
                   "street_name":{ "bsonType":"string",
                                          "description" :"name of street" },
                   "building_number":{"bsonType":"int",
                                "description":"number of building", minimum: 0, maximum: 500},
                   "budget":{"bsonType":"double",
                                           "description":"budget of company",minimum: 0 },

                   "Department":{ "bsonType":"object",
                               "required":["Department_name","floor_number","Employee"],
                               "properties":{ "Department_name":{"bsonType":"string",
                                                        "description": "name of department" },
                                              "floor_number":{"bsonType":"int",
                                                      "description":"number of floor" },
                                             }},

                    "Employee":{ "bsonType":"object",
                                          "required":["first_name","last_name","DOB","Salary"],
                                          "properties":{"first_name":{"bsonType":"string",
                                                                "description":"Employees first name"},
                                                        "last_name":{"bsonType":"string",
                                                                 "description":"Employees last name"},
                                                        "DOB":{"bsonType":"date",
                                                                   "description":"Date of birth of empployee"},
                                                        "Salary":{"bsonType":"double",
                                                                   "description":"Salary of Employee",minimum: 0},
                                                        "Position":{"bsonType":"string",
                                                                   "description":"Position of employee. Field is not required"}}}}}}});

我创建了一组数据以插入此集合以测试验证


db.Company.insert(
    { "city_name":"Sydney",
       "city":"Sydney",
       "street_name":"Pitt Street",
       "building_number":100,
       "budget": 100000.0,
       "Department":{"department_name":"Google",
                  "floor_number":4,
        "Employee" :{"first_name" : "George",
                     "last_name": "Martin",
                     "DOB": new Date('Dec 26,1981'),  
                     "Salary" : "70000",
                      "Position": "CEO"}}

     });

但是,当我运行此脚本时,出现错误

WriteResult({
    "nInserted" : 0,
    "writeError" : {
        "code" : 121,
        "errmsg" : "Document failed validation"
    }
})

可悲的是,Mongodb 对导致此类错误的原因不是很具体,我仔细阅读了我的语法和声明,并且自己无法发现任何错误,但显然有!

为什么我在运行代码时收到此错误?谢谢

标签: mongodbvalidationcollections

解决方案


试试这个:

01)架构:

db.createCollection(
    "Company", 
    {
        "validator": { 
            "$jsonSchema": {
                "bsonType":"object",
                "required":["city_name","city","street_name","building_number","budget","Department"],
                "properties": { 
                    "city_name":{ "bsonType" : "string", "description" : "name of city" },
                    "city":{ "bsonType" : "string", "description" : "City" },
                    "street_name":{ "bsonType" : "string","description" : "name of street" },
                    "building_number": { "bsonType" : "int", "description" : "number of building", minimum: 0, maximum: 500},
                    "budget": { "bsonType" : "double", "description" : "budget of company",minimum: 0 },
                    "Department": { 
                        "bsonType":"object",
                        "required":["Department_name","floor_number","Employee"],
                        "properties": { 
                            "Department_name":{"bsonType":"string", "description": "name of department" },
                            "floor_number":{"bsonType":"int", "description":"number of floor" },
                            "Employee":{ 
                                "bsonType":"object",
                                "required":["first_name","last_name","DOB","Salary"],
                                "properties":{
                                    "first_name":{"bsonType":"string", "description":"Employees first name"},
                                    "last_name":{"bsonType":"string", "description":"Employees last name"},
                                    "DOB":{"bsonType":"date", "description":"Date of birth of empployee"},
                                    "Salary":{"bsonType":"double", "description":"Salary of Employee",minimum: 0},
                                    "Position":{"bsonType":"string", "description":"Position of employee. Field is not required"}
                                }
                            }
                        }
                    },
                }
            }
        }
    }
);

02)插入:

db.Company.insert(
{  
    "city_name": "Sydney",
    "city": "Sydney",
    "street_name": "Pitt Street",
    "building_number": NumberInt(100),
    "budget": 100000.0,
    "Department":{
        "Department_name":"Google",
        "floor_number": NumberInt(4),
        "Employee" : {
            "first_name" : "George",
            "last_name": "Martin",
            "DOB": new Date('Dec 26,1981'),  
            "Salary" : 70000.0,
            "Position": "CEO"
        }
    },    
});

我必须做一些改变:

  • 'int' 字段必须是插入命令中的 NumberInt(number)。
  • 该方案已更改,以便“员工”在“部门”内。
  • 工资必须是双倍的。

推荐阅读