如何在一个get请求中返回多个Mongoose集合?

时间:2015-04-23 13:37:18

标签: node.js mongodb asynchronous express mongoose

我正在尝试生成一个响应,该响应返回按3个不同列排序的相同集合。这是我目前的代码:

var findRoute = router.route("/find")
findRoute.get(function(req, res) {
  Box.find(function(err, boxes) {
    res.json(boxes)
  }).sort("-itemCount");
});

正如您所看到的,我们正在制作一个get请求,查询Boxes,然后在最后按itemCount对它们进行排序。这对我不起作用,因为请求只返回按itemCount排序的单个JSON集合。

如果我想在同一个请求中返回另外两个按namesize属性排序的集合,我该怎么办?

3 个答案:

答案 0 :(得分:4)

Crete一个对象来封装信息并链接您的find查询,例如:

var findRoute = router.route("/find");
var json = {};

findRoute.get(function(req, res) {
  Box.find(function(err, boxes) {
    json.boxes = boxes;

    Collection2.find(function (error, coll2) {
      json.coll2 = coll2;

      Collection3.find(function (error, coll3) {
        json.coll3 = coll3;

        res.json(json);
      }).sort("-size");
    }).sort("-name");
  }).sort("-itemCount");
});

请确保执行相应的错误检查。

这有点丑陋,让你的代码难以阅读。尝试使用async等模块来调整此逻辑,甚至承诺(Qbluebird都是很好的例子)。

答案 1 :(得分:3)

如果我理解得很好,你需要这样的东西:return Several collections with mongodb

告诉我这是否有帮助。

再见。

答案 2 :(得分:0)

你试过吗?

Box.find().sort("-itemCount").exec(function(err, boxes) {
    res.json(boxes)
});

还可以根据您可以使用的2个或更多字段对结果进行排序:

.sort({name:1,size:-1})

如果有帮助,请告诉我。