我具有以下JSON结构:
{
"id": "5cea8bde0c80ee2af9590e7b",
"name": "Sofitel",
"pricePerNight": 88,
"address": {
"city": "Rome",
"country": "Italy"
},
"reviews": [
{
"userName": "John",
"rating": 10,
"approved": true
},
{
"userName": "Marry",
"rating": 7,
"approved": true
}
]
}
我想查找类似文档的列表,其中评论的所有评分值均满足特定条件,例如。小于8。以上评论将其视为不合格。
使用Querydsl的以下格式,我仍然可以获取该文档
BooleanExpression filterByRating = qHotel.reviews.any().rating.lt(8);
答案 0 :(得分:0)
您可以使用$filter
和$match
过滤掉不需要的交易。以下查询应做到:
注意:$过滤器中的cond
与您的条件相反。由于您需要ratings
小于8 ,因此在这种情况下,您将需要ratings
大于或等于8
db.qHotel.aggregate([
{
$addFields: {
tempReviews: {
$filter: {
input: "$reviews",
as: "review",
cond: { $gte: [ "$$review.rating", 8 ] } // Opposite of < 8, which is >= 8
}
}
}
},
{
$match : {
tempReviews : [] // This will exclude the documents for which there is at least one review with review.rating >= 8
}
}
]);
最后的结果将包含一个名为tempReviews
的空字段,您可以使用$project
删除它。