我有两个集合: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
数组字段中,以便稍后我可以获取该组中的所有人。这可以直接在同一个查询中完成吗?
答案 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
将确保数组中的唯一性,这在这种情况下可能有意义。
但是,您必须在不同的语句中查找/插入组本身。