Mongodb

如何根據 jsonSchema 驗證器查找所有無效文件?

  • October 14, 2020

MongoDB 3.6 中的新特性之一是 jsonSchema 驗證器。我可以使用驗證器創建一個集合,例如:

{
 "validator": {
   "$jsonSchema": {
     "properties": {
       "name": {
         "bsonType": "string",
         "description": "name"
       },
       "age": {
         "bsonType": "int",
         "minimum": 10,
         "maximum": 30
       }
     },
     "required": ["name", "age"],
     "bsonType": "object"
   }
 }
}

但是,如果該集合已經存在一些文件,而這些文件不能滿足驗證模式呢?如何根據驗證器找出所有無效文件?

您可以使用$jsonSchema查詢運算符來查找相關文件。

例如,使用mongo外殼:

// Retrieve the current validator for the "students" collection
var schema = db.getCollectionInfos({ name: "students" })[0].options.validator

// Find any documents not matching the schema
db.students.find({ $nor: [schema] })

同樣,您可以在$jsonSchema為集合添加或更新驗證器之前使用查詢運算符來確認預期匹配:

var schema = {
 $jsonSchema: {
   properties: {
     name: {
       bsonType: "string",
       description: "name",
     },
   },
   required: ["name"],
   bsonType: "object",
 },
}

// Find documents matching schema
db.students.find(schema)

引用自:https://dba.stackexchange.com/questions/203926