Pokud používáte mongo verze 3.6, můžete povolit ověření schématu pomocí $jsonSchema
na straně serveru
každý dokument, který aktualizujeme/vložíme, bude ověřen podle ověřovacího schématu, pokud se ověření nezdaří, bude vyvolána chyba a na dokumentu nebudou provedeny žádné úpravy
ukázkový node
schéma sbírky
{
_id : string,
parent : [string, null],
children : string[2]
}
ověřovací schéma
db.createCollection("node", {
validator: {
$jsonSchema: {
bsonType: "object",
required: [ "_id" ],
properties: {
parent: {
bsonType: ["string", "null"],
description: "must be a string"
},
children: {
bsonType: ["array"],
items : { bsonType: ["string"] },
minItems: 0,
maxItems: 2,
description: "must be a array of string and max is 2"
}
}
}
}
});
vloží [s platnými dokumenty]
> db.node.insert( { _id: "Books", children: [ "Programming" ], parent: null } )
WriteResult({ "nInserted" : 1 })
> db.node.insert( { _id: "Programming", children: [ "Databases", "Languages" ], parent: "Books" } )
WriteResult({ "nInserted" : 1 })
> db.node.insert( { _id: "Languages", children: [ ], parent: "Programming" } )
WriteResult({ "nInserted" : 1 })
> db.node.insert( { _id: "Databases", children: [ "MongoDB", "dbm" ], parent: "Programming" } )
WriteResult({ "nInserted" : 1 })
> db.node.insert( { _id: "MongoDB", children: [ ], parent: "Databases" } )
WriteResult({ "nInserted" : 1 })
> db.node.insert( { _id: "dbm", children: [ ], parent: "Databases" } )
WriteResult({ "nInserted" : 1 })
>
najít
> db.node.find()
{ "_id" : "Books", "children" : [ "Programming" ], "parent" : null }
{ "_id" : "Programming", "children" : [ "Databases", "Languages" ], "parent" : "Books" }
{ "_id" : "Languages", "children" : [ ], "parent" : "Programming" }
{ "_id" : "Databases", "children" : [ "MongoDB", "dbm" ], "parent" : "Programming" }
{ "_id" : "MongoDB", "children" : [ ], "parent" : "Databases" }
{ "_id" : "dbm", "children" : [ ], "parent" : "Databases" }
vložit s neplatným dokumentem [velikost dětí> 2]
> db.node.insert({_id : "1", children : ["c1", "c2", "c3"], parent : "p1"})
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 121,
"errmsg" : "Document failed validation"
}
})
>
vložení se nezdařilo s chybou ověření
aktualizace - pokus o přidání 3. potomka pro databáze _id, selhal s chybou ověření
> db.node.updateOne( { _id: "Databases"}, {$push : {children: [ "Oracle" ]}} )
2018-02-25T21:00:08.087+0530 E QUERY [thread1] WriteError: Document failed validation :
WriteError({
"index" : 0,
"code" : 121,
"errmsg" : "Document failed validation",
"op" : {
"q" : {
"_id" : "Databases"
},
"u" : {
"$push" : {
"children" : [
"Oracle"
]
}
},
"multi" : false,
"upsert" : false
}
})
[email protected]/mongo/shell/bulk_api.js:466:48
Bulk/[email protected]/mongo/shell/bulk_api.js:846:49
Bulk/[email protected]/mongo/shell/bulk_api.js:910:13
Bulk/[email protected]/mongo/shell/bulk_api.js:1154:21
[email protected]/mongo/shell/crud_api.js:572:17
@(shell):1:1
>
viz ověření schématu &jsonSchema další možnosti, přidání ověření ke stávající kolekci a ošetření selhání ověření