2017-02-01 3 views
1

私はmongodbとjavaを学び、次の質問をしています。フィルターをチェーンすることは可能ですか?Mongo Chainingフィルター

{"_id" : "...." 
    "name" :"Joe", 
    "roles" : ["A","B", "C"], 
    "value" : 1000 
} 

iはモンゴで文書が

例の役割が含まれているかどうかに私の

を依存更新するフィルタを使用して更新を行うことができ、次のようにモンゴの私の例の文書があります
listCriteria = ["B","D","E"] 

ロールB、D、Eを持つ場合はこの文書を更新し、値を2000に更新してください

Javaで

は、私はそれは、文書内の役割がリストの基準で少なくとも1つ含まれている場合のみ、「ジョー」の名前で文書を更新するように私はそれをチェーンすることができますどのようにフィルタ

Bson filter = Filters.eq("name", "Joe"); 
Filters.in("roles", roles); 

..... 
this.collection.updateOne(filter, updatedDocument...) 

を使用することができます知っている

+0

を、それはフィルタのチェーンですか? –

答えて

1

すべて 3の役割が含まれている必要があり - $all query operatorを使用します。

db.people.update(
    { 
    name: "Joe", 
    roles: {$all: ["B", "D", "E"]} 
    }, 
    { 
    $set: {value: 2000} 
    } 
); 

いかなる 3の役割が含まれている必要があり -を使用します:

db.people.update(
    { 
    name: "Joe", 
    roles: {$in: ["B", "D", "E"]} 
    }, 
    { 
    $set: {value: 2000} 
    } 
); 

一般的にフィルターを連鎖について、あなたは$and query operator使用することができます:あなたがチェーンで何を意味しています

db.people.update(
    { 
    $and: [ 
     {name: "Joe"}, 
     {roles: "B"}, 
     {roles: "D"}, 
     {roles: "E"} 
    ] 
    }, 
    { 
    $set: {value: 2000} 
    } 
);