使用排序执行批量查找查询并限制mongo

时间:2015-08-31 04:08:31

标签: performance mongodb

我有包含类别字段的文档,我想根据受欢迎程度,资历和受欢迎程度从每个类别中获取前10个文档。我计划在文档中使用votes字段来确定受欢迎程度,使用_id资历字段和votesPerDay字段来确定哪些字段越来越受欢迎。共有12个类别。

典型文档将如下所示。

{
   name : 'alpaca',
   category : 'blue',
   votes : 500,
   _id : Object.Id,
   votesPerDay : 50
}

{
   name : 'muon',
   category : 'green',
   votes : 100,
   _id : Object.Id,
   votesPerDay : 20
}

我有一个需要存储所有类别的对象,并且在每个类别中它将存储最受欢迎,最新和最受欢迎的类别。该对象将每24小时刷新一次。

每当我想查询所有12个不同类别的mongo时,我遇到麻烦的地方。

我试过让for循环为每个类别运行三个查询,并在结果到达时存储结果,但这失败了,因为我似乎过度加载了mongo服务器并且崩溃了。

我想要构建的对象的体系结构看起来像这样。

var myObj = {category1 : { 
   newest : [0,2....9],
   mostPopular : [0,2....9],
   risingInPopularity : [0,2....9]

} ..... with 12 of such objects};

我最初想到执行查询的方式(尽管我这样做有点不舒服)是。

categories.forEach(function(category){


    var query = {category : category}
    var sort = //sorting criterion for newest

    performQuery(query,sorting,function(results){

      myObject[category].newest = results

    });

    sort = //sorting criterion for most popular

performQuery(query,sorting,function(results){

      myObject[category].mostPopular= results

    });


sort = //sorting criterion for rising in popularity

performQuery(query,sorting,function(results){

      myObject[category].risingInPopularity = results

    });


//limit has to be set to 10 documents


});

所以我的问题是如何最好地执行这种类型的群发查询,我需要根据类别获取文档,并且只检索那些投票最多的前10个文档,这些文档是最近添加的(基于{ {1}}),并且拥有_id

0 个答案:

没有答案