簡體   English   中英

Mongoose對聚合結果進行排序

[英]Mongoose sort the aggregated result

我在解決這個mongodb(貓鼬)問題時遇到了很多困難。

這個架構'推薦'(用戶名,roomId,ll和日期),其集合包含用戶推薦。

我需要獲得最推薦的房間列表(按roomId)。 下面是架構和我嘗試過的mongoose查詢解決方案。

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等。 這些可以按任何順序呈現,並且可以根據需要多次呈現。 只是理解一個“管道”階段流動的結果導致下一個行動。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM