Я вроде как новичок во всей эйфории NoSQL и начинаю проект с MongoDB в качестве базы данных.
Цель: Распечатать список жилья, в котором есть как минимум 3 класса, большинство классов (половина или более) выше 6.
Внутреннее жилье.
Проблема: у меня есть массив отзывов. Я хотел бы объединить объекты в массив оценок и исключить рецензента и дату из каждого объекта.
Завершение: Затем я перенесу объекты с $ gt больше 5 (то есть 6 и более) в isGtArray и переместу wersa в isLtArray. Затем я могу посчитать, есть ли действительно половина оценок выше 6, и спроецировать их в isMostOfTheGradesMoreThan_6 и с помощью $ match распечатать их.
К настоящему моменту: первая часть жилья, имеющая как минимум 3 класса , решена.
Всем спасибо за помощь.
Код сейчас:
db.lodging.aggregate([
{$unwind: "$lodging.reviews"},
{$group:{
_id:"$guid",
lodging: { $first: "$lodging"},
reviews: { $push: "$lodging.reviews"}}
},
{$project: {
_id: 1,
lodging: 1,
reviews: 1,
reviewsCount: { $size:"$reviews" }}},
{ $match : { reviewsCount: { $gt: 2 } } },
])
Данные Json
{
"_id" : "5bf31f8c20b3acacc2194faa",
"registered" : "2016-04-22T08:54:50 -02:00",
"host" : {
"name" : "Schultz",
"surname" : "French",
"contact" : {"email" : "schultzfrench@orbean.com"}, },
"lodging" : {
"reviews" : [
{
"reviewer" : "Mariana Ayers",
"date" : "2014-04-13T08:30:02 -02:00",
"cleanliness" : NumberInt(9),
"location" : NumberInt(6),
"food" : NumberInt(4)},
{
"reviewer" : "Cole Simmons",
"date" : "2015-05-07T06:00:09 -02:00",
"cleanliness" : NumberInt(1),
"location" : NumberInt(3),
"food" : NumberInt(2)}]}
}
Решение
{
"_id" : "5bf31f8c20b3acacc2194faa",
"registered" : "2016-04-22T08:54:50 -02:00",
"host" : {
"name" : "Schultz",
"surname" : "French",
"contact" : {"email" : "schultzfrench@orbean.com"},},
"lodging" : {
"reviews" : [
{
"reviewer" : "Mariana Ayers",
"date" : "2014-04-13T08:30:02 -02:00",
"cleanliness" : NumberInt(9),
"location" : NumberInt(6),
"food" : NumberInt(4)},
{
"reviewer" : "Cole Simmons",
"date" : "2015-05-07T06:00:09 -02:00",
"cleanliness" : NumberInt(1),
"location" : NumberInt(3),
"food" : NumberInt(2)}]
"reviews_grades" : [
{"cleanliness" : NumberInt(9)},
{"location" : NumberInt(6)},
{"food" : NumberInt(4)},
{"cleanliness" : NumberInt(1)},
{"location" : NumberInt(3)},
{"food" : NumberInt(2)}}]}
}