2016-12-14 5 views
0

MongoDB noSQLデータベースが新しく、ドキュメントバリデーションが初めてです。MongoDB 3.4ドキュメントのバリデーションのマッチが「存在する」または「存在する」

私はフィールドが「存在」しないか、その値が1私は、次の形式で試してみました

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

from db.getCollectionInfos()の出力は、上で定義したバリデータと一致しません。データの検証はどこですか? – Veeram

+0

データベースを削除して、db.createCollection( "tickets"、{ バリデータ:{ $または:{{ステータス:{$存在する}}}、{ステータス:{$ in:[NumberInt )、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、スキーマエラー、OK、スキーマエラー、OK、OK

ありがとうございました!

関連する問題