【问题标题】:Mongoose sort the aggregated resultMongoose 对聚合结果进行排序
【发布时间】:2014-12-24 17:33:47
【问题描述】:

我在解决这个 mongodb(猫鼬)问题时遇到了很多困难。

有这个模式'Recommend'(用户名、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'});

        }
    );

【问题讨论】:

    标签: node.js mongodb mongoose mongodb-query aggregation-framework


    【解决方案1】:

    聚合管道返回的结果只是普通对象。因此,您将排序作为管道阶段进行,而不是作为单独的操作:

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

    所以有各种pipeline operators 可以用于$group$sort$limit 以及其他东西。这些可以按任何顺序呈现,并且可以根据需要多次呈现。只需了解一个“管道”阶段的流动会导致下一个采取行动。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-12
      • 1970-01-01
      • 2014-02-19
      • 2019-04-02
      • 1970-01-01
      • 1970-01-01
      • 2014-03-24
      • 1970-01-01
      相关资源
      最近更新 更多