使用聚合$ lookup加入mongodb

时间:2017-02-07 13:59:23

标签: mongodb

需要帮助。

我有两个系列,第一个系列并不是那么大的文件。

对于中等大小的文档,第二项有更多项目(数千,可能更多)。

第一个文档中有一个与第二个文档中的属性匹配的属性。

这里的关系是第一个集合中的项目在第二个集合中有许多其他项目引用它。

比如说我有第一个代表人的集合,第二个代表信用卡交易。一个人可能有很多交易。 PersonId是人员集合的id和事务集合中的每个事务文档。

我想写一个查询来计算每个人有多少交易。

我已经看到建议使用聚合和查找。 但是,当我尝试时,我收到一条消息,指出文档大小超出限制。

我猜这是因为它将一个人的所有交易聚合成一个文件......不确定,这是我第一次遇到mongodb。

实现这一目标的最佳方法是什么?聚合方法是正确的选择吗?

感谢名单! 吉利

1 个答案:

答案 0 :(得分:0)

您可以使用简单分组来获取每个人的交易计数

db.transactions.aggregate([
  { $group: {_id: "$personId", count: {$sum:1}}}
])

输出将包含此人的人员ID和交易次数。您可以在内存中匹配人员和交易统计信息。您还可以使用查找来返回包含某些人员数据的事务统计信息。但请记住 - 您不会为没有交易的人检索条目:

db.transactions.aggregate([
  { $group: {_id: "$personId", count: {$sum:1}}},
  { $lookup:
      {
        from: "people",
        localField: "_id",
        foreignField: "_id",
        as: "person"
      }
  },
  {$unwind: "$person"},
  {$project:{name:"$person.name", count:"$count"}}
])