У меня есть запрос на агрегацию, который возвращает сумму / общее количество отзывов, отправленных для данного местоположения (не средний звездный рейтинг).Отзывы набраны 1 - 5 звезд.Этот конкретный запрос группирует эти обзоры по двум категориям: «внутренняя» и «google».
У меня есть запрос, который возвращает результаты, которые почти соответствуют тому, что я ищу.Однако мне нужно добавить дополнительное условие для внутренних проверок.Я хочу убедиться, что значение "звездочки" для внутренних проверок существует / не равно нулю и содержит значение как минимум 1. Итак, я подумал, что добавление чего-то похожего на это будет работать:
{ "stars": {$gte: 1} }
Этотекущий запрос агрегации:
[
{
$match: { createdAt: { $gte: fromDate, $lte: toDate } }
},
{
$lookup: {
from: 'branches',
localField: 'branch',
foreignField: '_id',
as: 'branch'
}
},
{ $unwind: '$branch' },
{
$match: { 'branch.org_id': branchId }
},
{
$group: {
_id: '$branch.name',
google: {
$sum: {
$cond: [{ $eq: ['$source', 'Google'] }, 1, 0]
}
},
internal: {
$sum: {
$cond: [ { $eq: ['$internal', true]}, 1, 0 ],
},
}
}
}
]
Усеченная схема:
{
branchId: { type: String, required: true },
branch: { type: Schema.Types.ObjectId, ref: 'branches' },
wouldRecommend: { type: String, default: '' }, // RECOMMENDATION ONLY
stars: { type: Number, default: 0 }, // IF 1 - 5 DOCUMENT IS A REVIEW
comment: { type: String, default: '' },
internal: { type: Boolean, default: true },
source: { type: String, required: true },
},
{ timestamps: true }
Мне нужно убедиться, что я не учитываю рекомендации "хотел бы рекомендовать" в сумме внутренних обзоров.Определите, является ли что-то рецензией, оно будет иметь рейтинг в 1 или более звездочек.В рекомендациях звездочка будет иметь значение 0.
Как добавить условие, обеспечивающее, чтобы внутреннее значение "$ stars" было> = 1 (больше или равно 1)?
ИспользованиеОтвет Аша Мне удалось сформировать этот запрос:
[
{
$lookup: {
from: 'branches',
localField: 'branch',
foreignField: '_id',
as: 'branch'
}
},
{ $unwind: '$branch' },
{
$match: {
'branch.org_id': branchId
}
},
{
$group: {
_id: '$branch.name',
google: {
$sum: {
$cond: [{ $eq: ['$source', 'Google'] }, 1, 0]
}
},
internal: {
$sum: {
$cond: [
{
$and: [{ $gte: ['$stars', 1] }, { $eq: ['$internal', true] }]
},
1,
0
]
}
}
}
}
];