MongoDB - 跨多个文档计算实例

时间:2016-12-26 11:44:37

标签: mongodb

我有大约100个看起来像这样的文件:

{
    "_id": "p1",
    "when": "2016-06-01T00:00:00.000Z",
    "users": [
      "u1",
      "u2"
    ]
},

{
    "_id": "p2",
    "when": "2016-06-01T00:00:00.000Z",
    "users": [
      "u1",
      "u3"
    ]
},

{
    "_id": "p3",
    "when": "2016-06-01T00:00:00.000Z",
    "users": [
      "u1",
      "u2",
      "u3"
    ]
}

我想运行一个查询,它将返回两个日期之间正好存在于3个文档中的所有用户ID。

例如,使用上述数据,对于2016-04-01至2016-07-01的日期,它将返回u1(u1存在于这些日期之间的3条记录中)。

我认为它会使用某种group by或count和聚合框架,但我正在寻找最有效/最有效的方法,所以我愿意接受建议。请记住,虽然可能只有100个文档,但可能有100万个用户(因此每个文档中的用户数组可能很大)。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您可以尝试此查询

db.getCollection('collectionName').aggregate([
    {$match:{$and:[{"when": { "$gte": '2016-06-01T00:00:00.000Z' }},{"when": { "$lte": '2016-06-01T00:00:00.000Z' }}]}},
    {$unwind: "$users"},
    {$group:{_id:"$users", count:{$sum:1}}},
    {$match:{"count":{"$eq":3}}}
])

在这个查询中我遵循了一些步骤

  
      
  1. 过滤日期之间的记录
  2.   
  3. 计算每个用户存在的次数
  4.   
  5. 过滤以准确获得3次用户
  6.