如何使用MongoDB执行`has many`关联的查询

时间:2016-04-01 21:42:36

标签: javascript node.js mongodb express backbone.js

我有Node,Express和使用骨干网的设置。一切正常,我可以通过MongoDB集合检索记录,因为它们很简单,就像通过id或所有员工获取员工一样。我理解的是如何从MongoDB获取需要更复杂查询语法的集合,如下所示:

db.employees.aggregate(
   [
     { $group : { _id : "$managerName", employees: { $push: "$fullName" } } }
   ]
)

我目前有以下语法用于提取我想要作为json对象公开的数据并绑定到我的html页面中的元素。

exports.findById = function(req, res) {
    var id = parseInt(req.params.id);
    db.collection('employees', function(err, collection) {
        collection.findOne({'id': id}, function(err, item) {
            res.jsonp(item);
        });
    });
};

我希望获得所有经理及其员工报告给他们的列表,然后以某种方式将此结果集绑定到将Manager列为List标题的各个div,然后将所有员工作为列表报告给他们项目。结果集基本上由父母和孩子组成。我想用backbonejs动态地做这个。

我会做类似

的事吗?
exports.findRelations = function(req, res) {
    db.collection('employees', function(err, collection) {
        collection.aggregate({ $group : { _id : "$managerName", employees:{$push: "$fullName" } } }, function(err, item) {
            res.jsonp(item);
        });
    });
};

1 个答案:

答案 0 :(得分:0)

MongoDB的聚合管道要求您传递Array中的操作。这意味着正确的查询将是:

db.collection('employees').aggregate([
    { $group : { _id : "$managerName", employees:{$push: "$fullName" } }
  ])
  .toArray(function(err, managers){
    if (err){
      throw err;
    }

    res.jsonp(managers);
  });

您可以在此处找到有关使用NodeJS MongoDB驱动程序的汇总管道的详细信息:https://docs.mongodb.org/getting-started/node/aggregation/