在MongoDB查询活动(1 ... n)订阅(1 ... n)发票

时间:2018-10-03 15:25:58

标签: mongodb mongodb-query

我有一个具有以下模型关系的MongoDB数据库。 “活动”有许多“订阅”。 “订阅”有许多“发票”。 每个订阅都属于一个活动。每张发票都属于一个订阅

给出一个活动,我想找出与该“活动”相关的所有发票中的COUNT个

如何在MongoDB中编写这样的查询? (我想避免在每张发票中添加活动参考)

1 个答案:

答案 0 :(得分:0)

如果我正确理解您,您有3个集合:“活动”,具有“活动”链接的“订阅”和“具有订阅”链接的发票。如果是这样,您的代码应该像这样

db.invoices.aggregate([
  {
    $lookup: {
      from: 'subscriptions',
      localField: 'subscriptionId',
      foreignField: '_id',
      as: 'subscription'
    }
  },
  {
    $lookup: {
      from: 'activities',
      localField: 'subscription.activityId',
      foreignField: '_id',
      as: 'activity'
    }
  },
  {
    $match: {
      'activity._id': 'your activity _id'
    }
  },
  {
    $count: 'invoice_count'
  }
])