У меня есть массив отелей такой формы:
[
{
"_id" : ObjectId("..."),
"Reviews" : [
{
"Ratings" : {
"Service" : 4.0,
"Cleanliness" : "4",
"Overall" : 4.0,
"Value" : 4.0,
"Sleep Quality" : "4",
"Rooms" : "4",
"Location" : "5"
},
"AuthorLocation" : "...",
"Title" : "...",
"Author" : "...",
"ReviewID" : "...",
"Content" : "...",
"Date" : ISODate("...")
},
{
"Ratings" : {
"Cleanliness" : "5",
"Overall" : 5.0,
"Value" : 4.0,
"Service" : 5.0,
"Rooms" : "5"
},
"AuthorLocation" : "...",
"Title" : "...",
"Author" : "...",
"ReviewID" : "...",
"Content" : "...",
"Date" : ISODate("...")
}
],
"HotelInfo" : {
"Name" : "Hilton Garden Inn Baltimore White Marsh",
"HotelURL" : "...",
"Price" : "...",
"Address" : "...",
"HotelID" : "...",
"ImgURL" : "..."
}
},
... // More hotel entries
]
Что я в основном пытаюсь сделать, это просмотреть каждый из этих гостиничных документов в массиве и получить список объектов сназвание отеля и количество оценок 5 "Overall"
.
Желаемый вывод:
{ _id: "Hiltop Inn", numberOfFiveStarReviews: 3 },
{ _id: "Hot Hotel", numberOfFiveStarReviews: 2 },
{ _id: "Cool Hotel", numberOfFiveStarReviews: 6 }
и т. Д.
Я застрял на этом некоторое время и пробовал разные вещи с filter
или другими средствами агрегации, но у меня нетне смог заставить его работать.
Вот что у меня так далеко:
db.reviews.aggregate([
{ $unwind: "$Reviews" },
{ $unwind: "$Reviews.Ratings" },
{
$group : {
_id: "$HotelInfo.Name",
countOfFiveStarRatings: {
// NOT SURE WHAT TO DO HERE
}
}
}
])
Не уверен, что есть лучший подход, но это то, с чем я играл некоторое время.Я немного новичок в MongoDB, поэтому любая помощь обязательно будет оценена, спасибо!