Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何根据(另一个集合上)引用响应对象的文档数量对mongoose响应进行排序?_Node.js_Mongodb_Mongoose - Fatal编程技术网

Node.js 如何根据(另一个集合上)引用响应对象的文档数量对mongoose响应进行排序?

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.

我正在使用mongoose在node.js中编程一个后端,以便与我的mongo数据库通信

目前我有两个集合:线程和注释。 注释包含名为thread的字段,该字段包含threads集合文档的objectID

现在我想根据评论的数量按降序对所有线程进行排序

所以现在我有:

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')
。是的,这是一个解决方案。但是,难道没有一个惯例或其他东西,在数据库中保存一个可以计算的值是不好的吗@迪杰斯特拉