mongoosesorting聚合的结果

解决这个mongodb(mongoose)问题我有很多困难。

有这个架构'推荐'(用户名,roomId,ll和date),其集合包含用户的build议。

我需要得到最推荐的房间列表(由roomId)。 下面是模式和我尝试过的mongoose查询解决scheme。

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'}); } ); 

从聚合pipe道返回的结果只是普通的对象。 所以你做sorting作为一个pipe道阶段,而不是作为一个单独的操作:

 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 } ); 

所以有各种各样的pipe道运营商可以使用$group$sort$limit等等。 这些可以以任何顺序,并根据需要多次显示。 只要了解到一个“stream水线”阶段就会成为下一个行动的结果。