【问题标题】:How to return multiple Mongoose collections in one get request?如何在一个获取请求中返回多个 Mongoose 集合?
【发布时间】:2015-07-01 17:45:54
【问题描述】:

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

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

如您所见,我们正在发出一个 get 请求,查询 Box,然后在最后按 itemCount 对它们进行排序。这对我不起作用,因为该请求仅返回一个按 itemCount 排序的 JSON 集合。

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

【问题讨论】:

    标签: node.js mongodb asynchronous express mongoose


    【解决方案1】:

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

    告诉我这是否有帮助。

    再见。

    【讨论】:

    【解决方案2】:

    创建一个对象来封装信息并链接您的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 甚至是 Promise 等模块来调整此逻辑(Qbluebird 就是很好的例子)。

    【讨论】:

      【解决方案3】:

      你试过了吗?

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

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

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

      如果有帮助,请告诉我。

      【讨论】:

        猜你喜欢
        • 2017-09-21
        • 2022-09-27
        • 2019-02-07
        • 2019-01-02
        • 2017-06-05
        • 2016-06-20
        • 1970-01-01
        • 2019-02-28
        • 2021-10-25
        相关资源
        最近更新 更多