MongoDB中的标签集合

MongoDB中的标签集合,mongodb,Mongodb,我有两个收藏:个人(百万)和团体。创建组时我有一个规则,这实际上是查找人员的标准。现在,我想做的是将组\u id添加到所有匹配的人员 对我的API的请求: POST /groups { "rule": {"age": {"$gt": 18}}, "description": "persons above 18" } 在我的MongoDB上: db.persons.find({"age": {"$gt": 18}}) 现在我想将组\u id添加到每个匹配的人员中的组数组字段中,

我有两个收藏:
个人
(百万)和
团体
。创建
组时
我有一个
规则
,这实际上是查找
人员的标准。现在,我想做的是将
\u id
添加到所有匹配的
人员

对我的API的请求:

POST /groups {
    "rule": {"age": {"$gt": 18}},
    "description": "persons above 18"
}
在我的MongoDB上:

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

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

也许我遗漏了什么,但是一个简单的
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
请注意,这将一次又一次地添加相同的值,同时将确保数组中的唯一性,这在本例中可能是有意义的


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

谢谢。我有一个简短的跟进:将查询条件对象直接从API输入传递到MongoDB是否存在(注入)风险?是的,另请参阅位于的MongoDB常见问题解答。您可以在允许任意javascript执行的查询中使用
$where
。即使您成功地过滤了其中的所有write语句,您仍然可以使用效率极低的查询(或者简单地说是无限循环)来暂停系统,或者创建一个
$where:true
子句,该子句将导致所有用户的更新,从而使数据库中充斥(索引)数据,这也将淹没系统。