Mongooseは集計結果をソートします 質問する

Mongooseは集計結果をソートします 質問する

この mongodb (mongoose) 問題を解決するのに非常に苦労しています。

このスキーマ「Recommend」(ユーザー名、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'});

        }
    );

ベストアンサー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
    }
);

いろいろなパイプライン演算子それは$groupまたは$sortまたは$limit他にもいろいろあります。これらは、任意の順序で、必要な回数だけ提示できます。1 つの「パイプライン」ステージの結果が次のステージに流れ、それに基づいて処理されることを理解するだけで十分です。

おすすめ記事