Mongo Chaining过滤器

时间:2017-02-01 16:20:10

标签: mongodb mongo-java-driver

我正在学习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"仅当文档中的角色包含列表条件中的至少一个

1 个答案:

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