2016-12-14 41 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,架构错误,正常,架构错误,正常,确定

谢谢!