MongoDB, объединение объектов в массиве - PullRequest
0 голосов
/ 20 мая 2019

Я вроде как новичок во всей эйфории 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)}}]}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...