我在解决此mongodb(猫鼬)问题时遇到很多困难。
存在此模式“推荐”(用户名,roomId,ll和日期),其集合包含对用户的推荐。
我需要获取最推荐的房间列表(按roomId)。下面是模式和我尝试过的猫鼬查询解决方案。
var recommendSchema = mongoose.Schema({ username: String, roomId: String, ll: { type: { type: String }, coordinates: [ ] }, date: Date }) recommendSchema.index({ ll: '2dsphere' }); var Recommend = mongoose.model('Recommend', recommendSchema); Recommend.aggregate( { $group: { _id: '$roomId', recommendCount: { $sum: 1 } } }, function (err, res) { if (err) return handleError(err); var resultSet = res.sort({'recommendCount': 'desc'}); } );
从聚合管道返回的结果只是普通对象。因此,您将排序作为流水线阶段而不是作为单独的操作进行:
Recommend.aggregate( [ // Grouping pipeline { "$group": { "_id": '$roomId', "recommendCount": { "$sum": 1 } }}, // Sorting pipeline { "$sort": { "recommendCount": -1 } }, // Optionally limit results { "$limit": 5 } ], function(err,result) { // Result is an array of documents } );
因此,也可以使用多种流水线运算符 $group 或 $sort 或 $limit 和其他东西。这些可以按任意顺序显示,并且可以根据需要多次显示。仅仅了解一个“管道”阶段的流程会导致下一步行动。
$group
$sort
$limit