Node.js 如何获得一个;top20";用猫鼬查询?
我有一个mongoDB数据库,用于记录web视频视图:Node.js 如何获得一个;top20";用猫鼬查询?,node.js,mongodb,mongoose,Node.js,Mongodb,Mongoose,我有一个mongoDB数据库,用于记录web视频视图: S_logs = new mongoose.Schema({ video_id : String, time : Number //timestamp of when the video was saw }); M_logs = mongoose.model('logs', S_logs); 我需要获得当天观看次数最多的前20名视频,我可以使用聚合: M_logs.aggregate
S_logs = new mongoose.Schema({
video_id : String,
time : Number //timestamp of when the video was saw
});
M_logs = mongoose.model('logs', S_logs);
我需要获得当天观看次数最多的前20名视频,我可以使用聚合:
M_logs.aggregate([
{
"$match" : {
"time" : {
"$gt" : time_lower_bound,
"$lt" : time_upper_bound
}
}
},
{
"$group" : {
"_id" : "$video_id",
"count" : { "$sum" : 1 }
}
},
{
"$sort" : { "count" : -1 }
}
]).limit(20);
}
这是可行的,但为了一致性(这是我代码中唯一使用聚合而不是查询的地方),我也想使用查询来实现这一点,我提出了:
M_logs[from] .find()
.select('video_id') //Get all video_id
.where('time') //in the selected timespan
.gt(time_lower_bound)
.lt(time_upper_bound)
.sort('video_id') //sort them
.distinct('video_id')//get only the video_id list
.limit(20); //get only the first 20 to appear
但我得到:
Error: field selection and slice cannot be used with distinct
我想我可以使用count,但它只返回查询返回的文档总数
对我来说,如果我想对查询执行此操作,我可以选择进行20次查询,或者一次返回所有文档,然后分组并计算自己
我是否缺少一些函数/技巧/任何允许我返回具有相同视频id的文档计数(按降序排序)的功能?您无法使用查询聚合数据 如果要使用基本查询执行此操作,则应明确存储此信息(例如,维护视图计数器) 如果您只想保持编码风格的一致性,则可以使用以下命令重写聚合查询: 不过,它将生成相同的聚合查询
M_logs.aggregate().match({
time: {
$gt: time_lower_bound,
$lt: time_upper_bound
}
}).group({
_id: "$video_id",
count : { $sum: 1 }
}).sort({
count: -1
}).limit(20)