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
子句,该子句将导致所有用户的更新,从而使数据库中充斥(索引)数据,这也将淹没系统。