請幫助我,我正在嘗試通過用戶位置輸入來接近賣家,然后按平均評分排序。是否可以?這是模型的片段。模型有一系列評論。
const sellerSchema = new mongoose.Schema({
_id: Mongoose....ObjectId
//...
reviews: [
{
by: {
type: mongoose.Schema.Types.ObjectId,
ref: "User",
},
title: {
type: String,
},
message: {
type: String,
},
rating: Number,
imagesUri: [{ String }],
timestamp: {
type: Date,
default: Date.now,
},
},
],
});
然后我的匯總我有:
const seller = await Seller.aggregate(
[
{
$geoNear: {
near: {
type: "Point",
coordinates: [longitude, latitude],
},
distanceField: "distance",
spherical: true,
maxDistance: radius,
},
},
rating_minimum ? { $match: { rating: { $gt: rating_minimum } } }
: {},
{$limit: limit},
]);
我在考慮 $group 并創建 avgReview,然后按如下評論對它們進行排序:
{$group:{averageReviews: { $avg: "$reviews.rating"}},
{$sort: { averageReviews: 1 } },
{$limit: limit}
uj5u.com熱心網友回復:
由于評論在每個檔案的陣列中,而不是$group
收集檔案,您可以使用它$reduce
來計算平均評分:
{
$addFields: {
ratingSum: {
$reduce: {
initialValue: 0,
input: "$reviews",
in: {$sum: ["$$value", "$$this.rating"]}
}
}
}
},
{
$addFields: {
"averageReviews": {"$divide": ["$ratingSum", {$size: "$reviews"}]
}
}
},
{$sort: { averageReviews: 1 } },
{$limit: limit}
正如您在這個游樂場示例中看到的那樣。
我不確定您要限制 3 個,但如果是最終結果,3 個賣家,那么您使用它是正確的。
順便說一句,您的賣家模式缺少$geoNear
.
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/470260.html