如何在一个获取请求中返回多个 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 集合。
如果我想在同一个请求中返回另外两个按 name
和 size
属性排序的集合,我该怎么办?
【问题讨论】:
【参考方案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 等模块来调整此逻辑(Q
和 bluebird
就是很好的例子)。
【讨论】:
【参考方案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 内发出多个“查找”请求?