小编dim*_*wc3的帖子

MongoDB聚合组_id按不同字段

我有收款账户:

{
  "_id": ObjectId("571a0e145d29024733793cfe"),
  "name": "Cash",
  "user": ObjectId("571a0e145d29024733793cfc")
}
Run Code Online (Sandbox Code Playgroud)

和交易。交易可以有不同的字段:

{
  "_id": ObjectId("571a0e145d29024733793d06"),
  "amount": 100,
  "type": "earned",
  "account": ObjectId("571a0e145d29024733793cfe"),
  "user": ObjectId("571a0e145d29024733793cfc"),

},
{
  "_id": ObjectId("571a0e145d29024733793d04"),
  "amount": 300,
  "type": "spent",
  "account": ObjectId("571a0e145d29024733793cfe"),
  "user": ObjectId("571a0e145d29024733793cfc")
},
{
  "_id": ObjectId("571a0e145d29024733793d07"),
  "amount": 100,
  "type": "transfer",
  "sourceAccount": ObjectId("571a0e145d29024733793cfd"),
  "destinationAccount": ObjectId("571a0e145d29024733793cfe"),
  "user": ObjectId("571a0e145d29024733793cfc"),
}
Run Code Online (Sandbox Code Playgroud)

我想按每个帐户进行统计分组。我写了一个聚合框架查询到数据库:

db.transactions.aggregate([

  { $match: { user: user._id } },

  {
    $group: {
      _id: '$account',

      earned: {
        $sum: {
          $cond: [{ $eq: ['$type', 'earned'] }, '$amount', 0]
        }
      },

      spent: {
        $sum: { …
Run Code Online (Sandbox Code Playgroud)

database mongodb nosql aggregation-framework

5
推荐指数
1
解决办法
3477
查看次数

标签 统计

aggregation-framework ×1

database ×1

mongodb ×1

nosql ×1