Node.js:如何在Query Aggregation中返回Object?

Ran*_*ith 8 mongodb node.js mongodb-query aggregation-framework

我需要使用我的集合计算指定字段的总和 group by

所以,我使用了聚合函数.

我的愿望是函数应该只返回Object.当我使用时aggregate,它返回Array of Objects.

但我的查询是返回对象数组([{..}, {..}, {..}])而不是单个对象({..}).

例如,到目前为止我试过了

用Array []结构指定

MyModel.aggregate(
  [
    {$match : ... },
    {$group : ... }
  ], function(err, result) {
      console.log(result);
}); 
Run Code Online (Sandbox Code Playgroud)

指定没有Array []结构

MyModel.aggregate(
    {$match : ... },
    {$group : ... }
  , function(err, result) {
      console.log(result);
});
Run Code Online (Sandbox Code Playgroud)

以上两种情况都返回相同的情况.喜欢,

[
  {
    ...
    ...
  }
]
Run Code Online (Sandbox Code Playgroud)

我的期望result只有一个object

{
  ...
  ...
}
Run Code Online (Sandbox Code Playgroud)

Nei*_*unn 10

正式地说,aggregate命令采用管道参数的"列表"作为它的主要输入.这就是首选"数组"语法的原因.虽然它似乎没有通过你似乎正在使用的猫鼬方法严格实现,但这可能会改变.

"官方"论点是

  1. 表示管道条件的数组

  2. 选项文档,指定用于更改行为的各种选项.

所以这里的猫鼬形式只是在寻找"列表"中的哪个项目,function()并事先考虑一切都是管道.但这将在未来发生变化.你的问题似乎更像是"期待"不同形式产生"文件"或"阵列"作为回应.但这不会发生.

你不是真的,而且有充分的理由.聚合框架或者对集合内容执行操作,就像使用$project或者"分组"信息一样$group.

你通常只期望"一个"结果返回的唯一方法是你专门$match只获得一个结果或者$limit对一个结果的反应,或者即使你$group的单数或null价值.

通常期望它是结果的"集合"或在此表示为数组.现代MongoDB服务器和驱动程序实现实际上可以返回"光标",因此结果可能比新版本的16MB BSON限制更大.但仍然基本上是一个列表.

所以现在它总是一个像"mongoose"这样的数组,看起来你正在使用它.只需返回"第一个元素"即可.可能甚至限制为1:

MyModel.aggregate(
  [
    { "$match": ... },
    { "$group": ... },
    { "$limit": 1 }
  ], function(err, result) {
      console.log(result[0]);
});
Run Code Online (Sandbox Code Playgroud)

无论如何,这基本上就像所有方法一样.findOne().