2017-02-01 6 views
1

Я изучаю mongodb и java и задаю следующий вопрос: возможно ли связывать фильтры?Mongo Chaining filters

Так что мой пример документ в Монго следующего

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

Может ли я сделать обновление с помощью фильтра который будет обновляться в зависимости от того, будет ли документ в Монго содержит роли

пример моего

listCriteria = ["B","D","E"] 

обновите этот документ, если у него есть роли B, D, E, обновите значение до 2000

В Java я знаю, что могу использовать фильтры

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 ролей - использовать $in query operator:

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} 
    } 
);