Nếu bạn đang sử dụng mongo phiên bản 3.6, bạn có thể bật xác thực giản đồ bằng cách sử dụng $jsonSchema
ở phía máy chủ
mỗi tài liệu chúng tôi cập nhật / chèn sẽ được xác thực dựa trên lược đồ xác thực, nếu quá trình xác thực không thành công, một lỗi sẽ được đưa ra và sẽ không có sửa đổi nào được thực hiện trên tài liệu
nút node
lược đồ thu thập
{
_id : string,
parent : [string, null],
children : string[2]
}
lược đồ xác thực
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"
}
}
}
}
});
phụ trang [với tài liệu hợp lệ]
> 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 })
>
tìm thấy
> 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" }
chèn bằng tài liệu không hợp lệ [kích thước trẻ em> 2]
> db.node.insert({_id : "1", children : ["c1", "c2", "c3"], parent : "p1"})
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 121,
"errmsg" : "Document failed validation"
}
})
>
chèn không thành công với lỗi xác thực
cập nhật - cố gắng thêm con thứ 3 cho _id Databases, không thành công với lỗi xác thực
> 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
>
vui lòng tham khảo xác thực lược đồ & jsonSchema để có thêm tùy chọn, thêm xác thực vào bộ sưu tập hiện có và xử lý các lỗi xác thực