MongoDB聚合和计数

时间:2016-08-18 15:08:31

标签: mongodb mongodb-query aggregation-framework mongodb-aggregation

名为“myCollection”的集合中的文档如下所示:

FOS\UserBundle\Model\UserManagerInterface

我需要计算'from'和'to'的出现次数,最后得到这样的文档集合:

{ 
    _id : 57b4b4e028108d801738a472, 
    updatedAt : 2016-08-17T19:03:01.831+0000, 
    createdAt : 2016-08-17T19:02:56.887+0000, 
    from : 57b1c2fc4bf55ba009b36c84, 
    to : 57b1c75e4bf55ba009b36c85, 
}

其中_id来自'$ from'或'$ to'。

我写的错误的聚合查询是:

{ 
    "_id" : 7b1c2fc4bf55ba009b36c84, 
    "occurredInFrom" : 12, 
    "occurredInTo" : 16
}

我绝对可以看到_id:“$ from”是不够的。你能告诉我正确的方法吗?

注意:'myCollection'的结构不是最终的,如果您认为有更好的结构,请提出建议。

1 个答案:

答案 0 :(得分:1)

试试这个

db.myCollection.aggregate([
  { $project:
    { _id: 0,
      dir: [
        {id:"$from", from:{"$sum":1}, to:{"$sum":0}},
        {id:"$to", from:{"$sum":0}, to:{"$sum":1}}
      ]
    }
  },
  { $unwind : "$dir" },
  { $group:
    {
      _id: "$dir.id",
      occurredInFrom: { $sum: "$dir.from" },
      occurredInTo: { $sum: "$dir.to" }
    }
  }
])