首页 > 解决方案 > Mongodb 将 $group 缩小到特定 ID

问题描述

有一个如下所示的文档集合:

{
   _id: %%ID%%,
   category: %%CATEGORY_ID%%
   theory: %%THEORY_ID%%
}

我正在尝试计算特定理论的类别数量(一个人可能将理论 A 归类为 AA,而另一个人可能将理论 A 归类为 AB - 这是一般的想法)

{
    $group: {
       "_id": "$category",
       "count": { "$sum": 1 }
   }       
}

返回:

[
  { _id: 5f47e3be91e24c35c1081c36, count: 1 },
  { _id: 5f47b9341c56712da1d14b9e, count: 2 },
  { _id: 5f47b9821c56712da1d14ba4, count: 1 },
  { _id: 5f47b95e1c56712da1d14ba2, count: 1 },
  { _id: 5f47e44d91e24c35c1081c37, count: 2 },
  { _id: 5f47b94a1c56712da1d14b9f, count: 2 }
]

如何将其缩小到一个特定的理论。我正在尝试运行

$match: { 
    "theory": %%THEORY_ID_I_WANT_TO_COUNT_FOR%% // or "theory": { $eq: %%THEORY_ID_I_WANT_TO_COUNT_FOR%% }
},
$group: { ... }

但这会导致"Error: Arguments must be aggregate pipeline operators"

标签: mongodbmongoose

解决方案


你用错了,每个管道都必须在一个单独的对象中,试试这个,

  { $match: { "theory": %%THEORY_ID_I_WANT_TO_COUNT_FOR%% } },
  {
    $group: {
      "_id": "$category",
      "count": { "$sum": 1 }
    }
  }

操场


推荐阅读