[英]how to validate mongodb embedded document
MongoDB 3.2具有這個很好的驗證功能 。 但是,在本文檔中,它只顯示了如何在第一級字段上進行驗證。 如果我要插入以下嵌入式文檔,我該如何設置驗證規則?
{"name": {
"first_name": "xx",
"last_name": "yy"
}
}
我嘗試了以下但它不起作用,
db.createCollection( "name_collection",
{ validator: { $and:
[
{name.first_name: {$type: "string"}},
{name.last_name: {$type: "string"}}
]
}
)
提前致謝。
這是測試代碼,效果很好
> db.createCollection('name', {validator: {$and: [{"name.first_name": {$type: 'string'}}, {"name.last_name": {$type: 'string'}}]}})
{ "ok" : 1 }
看來你應該在name.last_name
添加""
,
用有效數據測試它
> db.name.insert({name: {first_name: 'xx', last_name: 'yy'}})
WriteResult({ "nInserted" : 1 })
用無效數據測試它
> db.name.insert({name: {first_name: 'xx', last_name: 3}})
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 121,
"errmsg" : "Document failed validation"
}
})
> db.name.find()
{ "_id" : ObjectId("56e8b644f33ed6e7f3c57f90"), "name" : { "first_name" : "xx",
"last_name" : "yy" } }
那么你的代碼片段中有幾個錯誤。
您的db.createCollection沒有匹配的braches。 應該是這樣的
db.createCollection("name_collection", {
validator: { $and:[
{'name.first_name': {$type: "string"}},
{'name.last_name': {$type: "string"}}
]}
})
要驗證驗證是否有效,請嘗試插入部分數據
db.name_collection.insert({name:{first_name:0, last_name:0}})
請參閱我只是將數值賦給first_name和last_name,因此驗證失敗。
執行上述查詢后,它會出現以下錯誤。
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 121,
"errmsg" : "Document failed validation"
}
})
但是,如果我將文本指定為粘貼在下面,插入應該成功。
db.name_collection.insert({name:{first_name:'f_name', last_name:'l_name'}})
結果:
WriteResult({ "nInserted" : 1 })
希望這就是你在尋找什么。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.