2017-01-04 65 views
1

我正在MongoDB中使用文檔驗證,這應該驗證我插入到users集合中的文檔的屬性的數據類型。下面是我在完全相同的序列由於文檔驗證,插入查詢突然失敗

> db.createCollection("users"); 
{ "ok" : 1 } 

> db.runCommand({ 
... collMod: "users", 
... validator: { 
... $and : [ 
...  { "nm" : { $type : "string" }}, 
...  { "mob" : { $type : "int" }}, 
... ] 
... }, 
... validationAction: "error", 
... validationLevel: "strict" 
... }); 
{ "ok" : 1 } 

> db.users.insertOne(
    { 
... "nm" : "foo", 
... "eml" : "[email protected]", 
... "mob" : 12345, 
... "isa" : true, 
... "blod" : "O+", 
... "sid" : 1, 
... "cid" : 1, 
... "aid" : 1, 
... "add" : "bar", 
... "dob" : "16-Sep-1992" 
...}); 

已經執行,但只要我跑最後insertOne命令,它失敗的文檔驗證和輸出以下的命令。

2017-01-04T18:27:16.824+0530 E QUERY [main] WriteError: Document failed validation : 
WriteError({ 
    "index" : 0, 
    "code" : 121, 
    "errmsg" : "Document failed validation", 
    "op" : { 
     "_id" : ObjectId("586cf12c5a37c6beeeb15940"), 
     "nm" : "foo", 
     "eml" : "[email protected]", 
     "mob" : 12345, 
     "isa" : true, 
     "blod" : "O+", 
     "sid" : 1, 
     "cid" : 1, 
     "aid" : 1, 
     "add" : "bar", 
     "dob" : "16-Sep-1992" 
    } 
}); 
[email protected]/mongo/shell/bulk_api.js:469:48 
Bulk/[email protected]/mongo/shell/bulk_api.js:836:49 
Bulk/[email protected]/mongo/shell/bulk_api.js:906:13 
Bulk/[email protected]/mongo/shell/bulk_api.js:1150:21 
[email protected]/mongo/shell/crud_api.js:242:9 
@(shell):1:1 

我試圖找出如果它是什麼,我的驗證,或者我在插入數據的問題,但不能。任何幫助,將不勝感激。

回答

1

使用"number"代替"int"在您的文檔驗證:

運行

db.runCommand({ 
    collMod:"users", 
    validator:{ 
     $and:[ 
     { 
      "nm":{ 
       $type:"string" 
      } 
     }, 
     { 
      "mob":{ 
       $type:"number" 
      } 
     }, 

     ] 
    }, 
    validationAction:"error", 
    validationLevel:"strict" 
}) 

,它應該正常工作

+0

啊這是爲我工作。 – molecule

+0

我剛纔發現我輸入的號碼實際上是以float的形式輸入的,我需要使用'NumberInt(12345)'來輸入我正在使用的手機號碼。但你的方法似乎是正確的。 – molecule