在MongoDB中标记集合

时间:2014-12-02 10:22:33

标签: mongodb

我有两个集合:persons(数百万)和groups。在创建group时,我有rule,这实际上是查找persons的条件。现在,我想要做的是将groups _id添加到所有匹配的persons

对我的API的请求:

POST /groups {
    "rule": {"age": {"$gt": 18}},
    "description": "persons above 18"
}

在我的MongoDB上:

db.persons.find({"age": {"$gt": 18}})

现在我想将group _id添加到每个匹配的groups中的persons数组字段中,以便稍后我可以获取该组中的所有人。这可以直接在同一个查询中完成吗?

1 个答案:

答案 0 :(得分:1)

也许我错过了一些东西,但是一个简单的update陈述应该这样做:

db.persons.update(
  { "age" : {$gt : 18} },
  { $addToSet : { "groups" : groupId }}, 
  false,  // no upsert ($addToSet and $push still add the field)
  true);  // update multiple docs in this query

请注意,$push会一遍又一遍地添加相同的值,而$addToSet将确保数组中的唯一性,这在这种情况下可能有意义。

但是,您必须在不同的语句中查找/插入组本身。