【问题标题】:MongoDB aggregation on LoopbackLoopback 上的 MongoDB 聚合
【发布时间】:2015-06-05 18:40:38
【问题描述】:

如何获得 Loopback PersistedModel 的总和?

似乎没有关于如何实现这一目标的documentation

如果可能的话,我希望避免在 Node.js 中查找所有行并将其求和。

更新

试用https://github.com/strongloop/loopback/issues/890的示例

var bookCollection = Book.getDataSource().connector.collection(Book.modelName);

我遇到了一个错误

throw new Error('MongoDB connection is not established');

如何获取集合的句柄以在 MongoDB 集合上手动运行聚合查询?

【问题讨论】:

标签: node.js mongodb loopbackjs


【解决方案1】:

终于成功了。大多数示例都省略了connect() 部分。

我的工作代码:

Book.getDataSource().connector.connect(function(err, db) {
  var collection = db.collection('Book');
  var author = Book.getDataSource().ObjectID(authorId);
  collection.aggregate([
    { $match: { authorId: author } },
    { $group: {
      _id: authorId,
     total: { $sum: "$price" }
    }}
  ], function(err, data) {
    if (err) return callback(err);
    return callback(null, data);
  });
});

【讨论】:

  • 不需要连接。我的代码适用于github.com/strongloop/loopback/issues/890 上的示例
  • 谢谢@uzyn!我认为在某些极端情况下模型可能无法连接,这是为了以防万一。
  • 嘿,我收到一个错误,例如聚合不起作用。你能帮帮我吗?
  • 你的函数中的数据对象是什么格式的?当我尝试登录它时,它是 AggregateCoursor,我真的不知道如何正确地从中获取数据。我看到你直接将它传递给回调。有用吗?
【解决方案2】:

带环回的聚合查询

Products.getDataSource().connector.connect(function(err, db) {
     var collection = db.collection('Products');
        collection.aggregate(
       [{ $match: { "productCode" : "WIN10-NoOS" } }]
        ).toArray(function(err,servicesData){
              if(err){

               }else{
             cb(null,servicesData);
           }

         });
    });

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-04-28
    • 2016-04-29
    • 2017-04-04
    • 2017-09-03
    • 2017-06-11
    • 1970-01-01
    • 1970-01-01
    • 2015-05-25
    相关资源
    最近更新 更多