我有包含类别字段的文档,我想根据受欢迎程度,资历和受欢迎程度从每个类别中获取前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
。