Mongodb中查找同一集合中两个数据集的交集的查询操作

Mongodb中查找同一集合中两个数据集的交集的查询操作,mongodb,Mongodb,我是Mongo新手,需要帮助形成查询以从mongodb集合检索以下信息 假设我有一个集合,其中包含用户与组的关联。可以将用户分配到某些组。在下面的示例中,我想找出属于组(1或2)和组3的用户,组3将为以下数据返回user1。虽然user2和user3分别属于组1和组2,但不会返回,因为它们不属于组3 就这么简单: db.colection.distinct('user', {$and : [{$or : [{group : 1}, {group : 2}]}, {group : 3}]});

我是Mongo新手,需要帮助形成查询以从mongodb集合检索以下信息

假设我有一个集合,其中包含用户与组的关联。可以将用户分配到某些组。在下面的示例中,我想找出属于组(1或2)和组3的用户,组3将为以下数据返回user1。虽然user2和user3分别属于组1和组2,但不会返回,因为它们不属于组3



就这么简单:

db.colection.distinct('user', {$and : [{$or : [{group : 1}, {group : 2}]}, {group : 3}]});

您可以查看mongodb文档部分,了解有关的信息。还有。

关于您的问题,第一件事是这5个文档不能插入到一个集合中,因为3个文档具有相同的
\u id
字段值,并且该
\u id
字段是mongodb中的主键,因此不能在单个集合中重复。因此,通过在集合中插入以下数据

 { "_id" : NumberLong(1), "user" : "user1", "group" : NumberLong(1) }
 { "_id" : NumberLong(2), "user" : "user1", "group" : NumberLong(2) }
 { "_id" : NumberLong(3), "user" : "user1", "group" : NumberLong(3) }
 { "_id" : NumberLong(4), "user" : "user2", "group" : NumberLong(1) } 
 { "_id" : NumberLong(5), "user" : "user3", "group" : NumberLong(2) }
您可以使用mongodb聚合框架查找属于组1或组2以及组3的所有用户。对此的查询将是

  db.user.aggregate({
   $group: {
             _id: "$user",
              grouping: { $addToSet: "$group"} } },
           {  $match: { 
                     $and: [
                            { $or: [{ grouping: { $in: [1,2]}}]},
                            { grouping: 3}
                            ]}});

谢谢joao和Vijay在这方面的帮助。Vijay,我很抱歉在我的示例中有重复的主键。你提供的解决方案对我来说非常有效。joao,使用$and和$or子句的独特操作对我不起作用。结果是空的
  db.user.aggregate({
   $group: {
             _id: "$user",
              grouping: { $addToSet: "$group"} } },
           {  $match: { 
                     $and: [
                            { $or: [{ grouping: { $in: [1,2]}}]},
                            { grouping: 3}
                            ]}});