この 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 つの「パイプライン」ステージの結果が次のステージに流れ、それに基づいて処理されることを理解するだけで十分です。