2015-10-05 32 views
0

用户将链接插入到Mongo Collection中,我想根据集合中特定链接的次数检索最流行的数据。对于像有多少链接从Youtube即将静态的数据,你可以做到以下几点:查找Mongo Collection中动态生成数据的次数

Meteor.users.find({ "site": "youtube" }).count() 

,但如何去动态数据,作为一个例子这样一个环节:

Meteor.users.find({ "url": "youtube.com/watch?v=u1z4vkPWkLQ" }).count() 

编辑:

如何在客户端上显示?当我执行以下操作时,在控制台中出现错误,说明Videos.aggregate不是函数。

Template.frontPage.helpers({ 
 
\t mostDownloadedVideos: function() { 
 
\t \t return Videos.aggregate(
 
\t \t \t [ 
 
\t \t \t \t { $unwind : "$filename"}, 
 
\t \t \t \t { $group : { _id : "$filename", number : { $sum : 1} } }, 
 
\t \t \t \t { $sort : {number : -1} }, 
 
\t \t \t \t { $limit : 3 } 
 
\t \t \t ] 
 
\t \t); 
 
\t } 
 
});

回答

1

可以使用蒙戈的aggregate功能。在你的情况下:

Meteor.users.aggregate([ 
    { $project : { popular : { $url : "$url" } } } , 
    { $group : { _id : {url:"$url"} , number : { $sum : 1 } } }, 
    { $sort : { "_id.number" : -1 } } 
    ]) 

有了这个你可以根据受欢迎程度采取最高的结果或显示列表。

+0

感谢您的回答,您可以检查我的编辑,BC我有一些问题与。 – mhlavacka

+0

你可以结合@ KubaWyrobek的答案。我不知道流星不暴露集合函数。请记住,最好在服务器端运行聚合以获得最佳性能。您也可以使用[this](http://stackoverflow.com/questions/18520567/average-aggregation-queries-in-meteor)作为实现自定义聚合方法的参考。 – JavaGhost

1

默认情况下,聚合函数未在流星中暴露。 但是你可以用包访问:meteorhacks:aggregate

var metrics = new Mongo.Collection('metrics'); 
var pipeline = [ 
    {$group: {_id: null, resTime: {$sum: "$resTime"}}} 
]; 
var result = metrics.aggregate(pipeline); 

Source