我正在学习mongodb和java并且有以下问题,是否可以链接过滤器?
所以我在mongo中的示例文档如下
{"_id" : "...."
"name" :"Joe",
"roles" : ["A","B", "C"],
"value" : 1000
}
我是否可以使用过滤器进行更新,过滤器将根据mongo中的文档是否包含角色进行更新
示例我的
listCriteria = ["B","D","E"]
如果它具有角色B,D,E,请更新此文档,将值更新为2000
在java中我知道我可以使用过滤器
Bson filter = Filters.eq("name", "Joe");
Filters.in("roles", roles);
.....
this.collection.updateOne(filter, updatedDocument...)
如何将其链接以便使用名称更新文档" Joe"仅当文档中的角色包含列表条件中的至少一个
时答案 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}
}
);