簡體   English   中英

如何驗證mongodb嵌入式文檔

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM