【问题标题】:Meteorhacks:aggregate gives "MongoError: A pipeline stage specification object must contain exactly one field."Meteorhacks:aggregate 给出“MongoError:管道阶段规范对象必须只包含一个字段。”
【发布时间】:2017-07-17 13:06:37
【问题描述】:

我正在尝试汇总一些简单的数据,并在我的案例中获取每个人的总时间。正如一些指南所建议的那样,我已将包meteorhacks:聚合到流星中。但是我无法让它工作。

这是文档在 mongoDB 中的外观:

{startnumber: 1, name: "John Doe", time: 10000}
{startnumber: 1, name: "John Doe", time: 5000}
{startnumber: 2, name: "Jane Doe", time: 11000}

这就是我的聚合在 server/main.js 中的样子:

Meteor.methods({
  getTotalTime() {
    rankings.aggregate({
      $match: { startnumber: 1 },
      $group: { _id: '$name', total: { $sum: '$time' } }
    });
  }
});

希望的结果应该是:

{startnumber: 1, name: "John Doe", time: 15000}

我做错了什么?

【问题讨论】:

  • 既然您删除了 MIM 问题,我必须在这里继续。 MIM 的主要用途是结合现有的提供者,而不是创建自己的。 LDAP、AD 等都有自己的同步机制。托管 ADAM 实例比构建您自己的配置文件提供程序更容易。这样做是一种高级方案。在任何情况下,您都可以在 SQL Server 中使用 Change Tracking 来仅检索自版本号以来发生更改的行。它适用于所有版本/版本
  • 不知道 FIM/MIM 是否理解它,但不知道您用于创建提供程序的参考/链接。我早在 2010 年就使用 FIM 将 AD 配置文件同步到 SharePoint,是的,这很痛苦,但不,我没有使用它来访问自定义配置文件存储

标签: javascript mongodb meteor


【解决方案1】:

每个管道阶段都应包含在自己的文档中。添加$project 阶段以格式化响应

.aggregate( 
   { $match: { startnumber: 1 } },
   { $group: { _id: '$name', startnumber:{ $first:'$startnumber' }, total: { $sum: '$time' } } },
   { $project: { name: '$_id', startnumber:1, total:1, _id:0 } }
)

【讨论】:

    猜你喜欢
    • 2020-02-04
    • 2013-12-08
    • 1970-01-01
    • 2017-07-03
    • 2017-09-20
    • 2016-12-27
    • 2014-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多