MongoServerError:管道阶段规范对象必须恰好包含一个字段

问题描述 投票:0回答:1

我有 3 个 mongo 集合,它们有一个共同的字段(在每个集合中,该字段采用不同的值,因此不可能有任何连接)。我想总结该字段在每个集合中采用的不同值;类似于:distinct_value_col1 + distinct_value_col2 + distinct_value_col3

这是我试过的:

db.aggregate([
  {
    '$facet': {
      'query1':
        db.col1.aggregate([
        {
        '$group': {
          _id: "$field",
          count: { $sum: 1 }
        }
        },
        {
        '$group': {
          _id: null,
          distinctCount: { $sum: 1 }
        }
        }
        ]).toArray(),
      'query2': 
        db.col2.aggregate([
          {
            '$group': {
              _id: "$field",
              count: { $sum: 1 }
            }
          },
          {
            '$group': {
              _id: null,
              distinctCount: { $sum: 1 }
            }
          }
        ]).toArray()
    }
  },
  {
    '$project': {
      total: {
        '$add': ["$query1.distinctCount", "$query2.distinctCount"]
      }
    }
  }
])

你知道如何解决这个问题吗?

mongodb aggregate
1个回答
0
投票

该查询是 javascript 代码和 JSON 的混合体。聚合函数需要一个对象数组,每个对象代表聚合的一个阶段。

对于您显示的聚合,在客户端使用

distinct
和 sum 可能会更有效,例如:

db.col1.distinct("field").length + db.col2.distinct("field").length
© www.soinside.com 2019 - 2024. All rights reserved.