Node.js 如何根据(另一个集合上)引用响应对象的文档数量对mongoose响应进行排序?
我正在使用mongoose在node.js中编程一个后端,以便与我的mongo数据库通信 目前我有两个集合:线程和注释。 注释包含名为thread的字段,该字段包含threads集合文档的objectID 现在我想根据评论的数量按降序对所有线程进行排序 所以现在我有:Node.js 如何根据(另一个集合上)引用响应对象的文档数量对mongoose响应进行排序?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我正在使用mongoose在node.js中编程一个后端,以便与我的mongo数据库通信 目前我有两个集合:线程和注释。 注释包含名为thread的字段,该字段包含threads集合文档的objectID 现在我想根据评论的数量按降序对所有线程进行排序 所以现在我有: Thread.find({}) .then((threads) => { function mycomparator(a, b) { Comment.
Thread.find({})
.then((threads) => {
function mycomparator(a, b) {
Comment.find({ thread: a._id }).countDocuments()
.then((amountOfCommentsOnA) => {
Comment.find({ thread: b._id }).countDocuments()
.then((amountOfCommentsOnB) => {
return amountOfCommentsOnB - amountOfCommentsOnA;
})
})
};
threads.sort(mycomparator);
res.send(threads);
})
但排序不起作用。当我在console.log中记录AMONTOFCOMMENTSONA和AMONTOFCOMMENTSONB时,结果是正确的。但正如我所说的,分类并不重要
我需要做些什么才能使这项工作起作用?这不是一个正确的答案,但目前您正在做的工作可以改进。如果我是你,我会在
Thread
集合中保留一个注释计数器。因此,当创建新注释时,我会从Thread
集合中增加计数器。最后,我将这样做以获得预期的结果:Thread.find({}).sort('commentCount')
。是的,这是一个解决方案。但是,难道没有一个惯例或其他东西,在数据库中保存一个可以计算的值是不好的吗@迪杰斯特拉