Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.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 Nodejs Mongoose-一个数据库调用=按不同条件排序的两个独立数组_Node.js_Database_Mongodb_Express_Mongoose - Fatal编程技术网

Node.js Nodejs Mongoose-一个数据库调用=按不同条件排序的两个独立数组

Node.js Nodejs Mongoose-一个数据库调用=按不同条件排序的两个独立数组,node.js,database,mongodb,express,mongoose,Node.js,Database,Mongodb,Express,Mongoose,我正在使用Nodejs(express)+MongoDB,我想问一下是否有办法访问数据库以获取一组文档(为了简单起见,让我们说一下具有likes计数和views计数属性的博客帖子),首先对结果进行排序,将其存储在array1中,然后在不调用数据库的情况下再次对其进行排序,然后按视图进行排序,将其存储在array2中,因此结果将为: 1数据库访问 array1:按喜欢数排序的博客帖子 array2:按视图计数排序的博客文章 因此,基本上我不想链接排序查询,但我希望输出是2个数组,每个数组按不同

我正在使用Nodejs(express)+MongoDB,我想问一下是否有办法访问数据库以获取一组文档(为了简单起见,让我们说一下具有likes计数和views计数属性的博客帖子),首先对结果进行排序,将其存储在array1中,然后在不调用数据库的情况下再次对其进行排序,然后按视图进行排序,将其存储在array2中,因此结果将为:

  • 1数据库访问
  • array1:按喜欢数排序的博客帖子
  • array2:按视图计数排序的博客文章

因此,基本上我不想链接排序查询,但我希望输出是2个数组,每个数组按不同的条件排序。非常感谢。

您可以使用aggregate进行以下操作:

db.blog.aggregate([
   {
      $facet: {
        sortByLikeCounts: [ { $sort: { likeCounts: -1 }} ],      // likeCounts is field name which is used to save total counts of like 
        sortByViewCounts: [ { $sort: { viewCounts: -1 }} ]       // viewCounts is field name which is used to save total counts of view
      }
   }
])

结果,您将得到两个按不同查询排序的独立数组。

您的问题是什么?可能我的方法完全错误(我没有那么丰富的经验),但如果每次数据库访问都会消耗服务器资源,然后我认为最好搜索文档一次,然后生成两个数组,每个数组按不同的标准排序,而不是调用数据库两次,然后在第一次调用中按视图排序文档,第二次调用中按喜欢排序,否则我错了?直接从查询中获取排序后的数组array1,然后可以使用从array1创建array2。问题出在哪里?我的想法与mozilla相同,但正如mozilla所说,.sort()的速度和空间复杂性无法保证,因此我的想法是MongoDB排序算法将比javascript.sort()更快。我在Mongo shell中尝试了它,它确实有效。非常感谢。