2016-12-14 44 views
0

我是新來的MongoDB noSQL數據庫和新的文檔驗證。MongoDB 3.4文檔驗證匹配「存在」或「在」

我要指定一個字段沒有出現在集合「存在」或它的值是一個0,1,2,3

之間

我在下面的格式都試過:

db.createCollection("tickets", { 

validator:{ 

    $or:[{status:{$exists:false}},{status:{$in:[NumberInt(0),NumberInt(1),NumberInt(2),NumberInt(3)]}}] 
    } 
}) 

的MongoDB讓我插入的對象:

db.tickets.insert({ 
    status: NumberInt(8) 
}) 

兩個單獨的$存在和$在運營商對我的作品...... 什麼,我做錯了什麼?

我試着用這個例子:

db.dropDatabase() 
use prova 
db.createCollection("tickets", { 

validator: { 

    $or: [{data:{$exists: false}}, {data: {$type: "date"}}], 
    $or: [{status:{$exists: false}}, {status: {$in: [NumberInt(0), NumberInt(1), NumberInt(2), NumberInt(3)]}}], 

} 
}) 

db.tickets.insert({})           //Must be correct 
db.tickets.insert({data:"hello"})        //Must be wrong 
db.tickets.insert({data:new Date()})       //Must be correct 
db.tickets.insert({status:NumberInt(5)})      //Must be wrong 
db.tickets.insert({status:NumberInt(3)})      //Must be correct 
db.tickets.insert({data:new Date(), status:NumberInt(2)})  //Must be correct 

響應:ALL OK ...?

我從db.getCollectionInfos()這樣的輸出:

/* 1 */ 
[ 
    { 
     "name" : "tickets", 
     "type" : "collection", 
     "options" : { 
      "validator" : { 
       "$or" : [ 
        { 
         "status" : { 
          "$exists" : false 
         } 
        }, 
        { 
         "status" : { 
          "$in" : [ 
           0, 
           1, 
           2, 
           3 
          ] 
         } 
        } 
       ] 
      } 
    }, 
    "info" : { 
     "readOnly" : false 
    }, 
    "idIndex" : { 
     "v" : 2, 
     "key" : { 
      "_id" : 1 
     }, 
     "name" : "_id_", 
     "ns" : "prova.tickets" 
    } 
} 

]

+0

來自db.getCollectionInfos()的輸出不符合您在上面定義的驗證器。數據的驗證在哪裏? – Veeram

+0

您可以直接刪除數據庫並嘗試使用db.createCollection(「tickets」,{ validator:{ }或者:[{status:{$ exists:false}},{status: ),NumberInt(1),NumberInt(2),NumberInt(3)]}}], } })之後插入狀態:8,插入並讓我somefield:2,讓我知道你得到的迴應? – Veeram

回答

0

這似乎爲我工作:加$和[]操作包裝驗證的線路:

db.dropDatabase() 
use prova 
db.createCollection("tickets", { 

validator: { 

    $and:[ 
    {$or: [{data:{$exists: false}}, {data: {$type: "date"}}]}, 
    {$or: [{status:{$exists: false}}, {status: {$in: [NumberInt(0), NumberInt(1), NumberInt(2), NumberInt(3)]}}]} 
     ] 
} 
}) 

db.tickets.insert({})           //Must be correct 
db.tickets.insert({data:"hello"})        //Must be wrong 
db.tickets.insert({data:new Date()})       //Must be correct 
db.tickets.insert({status:NumberInt(5)})      //Must be wrong 
db.tickets.insert({status:NumberInt(3)})      //Must be correct 
db.tickets.insert({data:new Date(), status:NumberInt(2)})  //Must be correct 

結果:OK,架構錯誤,正常,架構錯誤,正常,確定

謝謝!