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

Posted

技术标签:

【中文标题】如何在一个获取请求中返回多个 Mongoose 集合?【英文标题】:How to return multiple Mongoose collections in one get request? 【发布时间】: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 属性排序的集合,我该怎么办?

【问题讨论】:

【参考方案1】:

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

告诉我这是否有帮助。

再见。

【讨论】:

或者您可以为此使用承诺。 ***.com/questions/22794827/… 这似乎是我需要的。我稍后会返回结果。 @vanadium23 -- 完成查理的建议后,我会尽快查看您的建议。非常感谢! 链接已于 2018 年 5 月断开。这就是为什么我们要求您发布和回答,而不仅仅是一个链接。如果您添加实际答案,您将不会遭受投票的愤怒! :-) 找到链接内容:web.archive.org/web/20150108205205/http://www.kdelemme.com:80/…【参考方案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)

如果有帮助,请告诉我。

【讨论】:

以上是关于如何在一个获取请求中返回多个 Mongoose 集合?的主要内容,如果未能解决你的问题,请参考以下文章

mongoose - 如何使用带有请求参数数组的 $in 进行 .find()现在它只返回空数组

如何在 Express 和 Mongoose 的一个控制器 API 内发出多个“查找”请求?

在实体框架数据库优先方法中,如何从存储过程返回多个结果集?

如何在 Mongoose/Node 中同时渲染多个变量?

如何通过MyBatis获取mysql存储过程返回的不确定个数的多个结果集

具有多个条件的 Mongoose updateMany() 返回 0