Как изменить этот ответ на простой массив? - PullRequest
1 голос
/ 17 июня 2020
{
"success": true,
"message": "Result",
"data": [
    {
        "Here": [
           {
                "_id": "5ee97ee7f25d1c1482717bdf",
                "email": "test1@test.io",
                "profileImages": [],
                "username": "test1",
                "birthday": "2020-06-11T10:11:32.000Z",
                "phoneNumber": "+910000000000",
                "location": "Test Location",
                "firstName": "test1",
                "lastName": "test1",

            }
        ]
    },
    {
        "Here": [
           {
                "_id": "5ee97ef2f25d1c1482717be1",
                "email": "test2@test.io",
                "profileImages": [],
                "username": "test2",
                "birthday": "2020-06-11T10:11:32.000Z",
                "phoneNumber": "+910000000000",
                "location": "Test Location"
            }

        ]
    }
],

}

Я ожидаю, что это

 {
"success": true,
"message": "Result",
data: [
       {
            "_id": "5ee97ee7f25d1c1482717bdf",
            "email": "test1@test.io",
            "profileImages": [],
            "username": "test1",
            "birthday": "2020-06-11T10:11:32.000Z",
            "phoneNumber": "+910000000000",
            "location": "Test Location",
            "firstName": "test1",
            "lastName": "test1"},
        {
            "_id": "5ee97ef2f25d1c1482717be1",
            "email": "test2@test.io",
            "profileImages": [],
            "username": "test2",
            "birthday": "2020-06-11T10:11:32.000Z",
            "phoneNumber": "+910000000000",
            "location": "Test Location"
        }
    ]

}

Запрос, который я использую, для этого ответа приведен ниже с использованием агрегации в mongodb, поиске и проекте, который ведет меня на какой-то нежелательный ответ

db.collections.aggregate( [

            {
            $lookup: {
                from: 'users',
                as: 'Here',
                let: {
                    whoDid: '$whoDid'
                },
                pipeline: [
                    {
                        "$match": { "$expr": { "$eq": ["$_id", "$$whoDid"] } }
                    },
                    {
                                $project: {
                                _id: 1,
                                email: 1,
                                profileImages: 1,
                                username: 1,
                                birthday: 1,
                                phoneNumber: 1,
                                firstName: 1,
                                lastName: 1,
                                fullName: 1,

                                // age: {$year: "$birthday"} 
                                age: {
                                    $divide: [{ $subtract: [new Date(), "$birthday"] },
                                    (31558464000)]
                                }
                            }
                    }
                ],
            }

        },

            {
                $project:{
                    Here:1,
                    _id:0

                }
            }  ,   
        ])

, который сделал таблицу, является одной из коллекции, которая у меня есть, где я сохранил идентификатор пользователя, а позже я заполняю данные с помощью поиска

{
"_id" : ObjectId("5ee988eb1aac0022e15dbb7b"),
"whoDid" : ObjectId("5ee97ef2f25d1c1482717be1"),
"toWhomDid" : ObjectId("5ee97ec0f25d1c1482717bdd"),
"modified_at" : ISODate("2020-06-17T03:07:23.217Z"),
"created_at" : ISODate("2020-06-17T03:07:23.217Z"),
"__v" : 0
}
{
"_id" : ObjectId("5ee988eb1aac0022e15dbb7c"),
"whoDid" : ObjectId("5ee97ec0f25d1c1482717bdd"),
"toWhomDid" : ObjectId("5ee97ef2f25d1c1482717be1"),
"modified_at" : ISODate("2020-06-17T03:07:23.220Z"),
"created_at" : ISODate("2020-06-17T03:07:23.220Z"),
"__v" : 0
}

Может Кто-нибудь предлагает мне лучший вариант, чтобы я мог получить желаемый результат?

Ответы [ 2 ]

0 голосов
/ 17 июня 2020

Добавьте эти дополнительные шаги в конвейер агрегации:

{
  $unwind: "$Here"
},
{
  $replaceWith: "$Here"
}

MongoPlayground

Примечание: Вы можете заменить $project: { _id: 1, email: 1, ... на это :

{
  $addFields:{
    age: {
      $divide: [{ $subtract: [new Date(), "$birthday"] },(31558464000)]
    }
  }
}
0 голосов
/ 17 июня 2020

Можно использовать reduce метод:

obj.data = obj.data.reduce((a, c) => {
    a.push(...c.Here);
    return a;
}, [])

Пример:

let obj = {
  "success": true,
  "message": "Result",
  "data": [      {
          "Here": [             {
                  "_id": "5ee97ee7f25d1c1482717bdf",                  "email": "test1@test.io",
                  "profileImages": [],                  "username": "test1",
                  "birthday": "2020-06-11T10:11:32.000Z",                  "phoneNumber": "+910000000000",                  "location": "Test Location",
                  "firstName": "test1",                  "lastName": "test1",
              }
          ]
      },
      {
          "Here": [             {
                  "_id": "5ee97ef2f25d1c1482717be1",
                  "email": "test2@test.io",
                  "profileImages": [],
                  "username": "test2",
                  "birthday": "2020-06-11T10:11:32.000Z",
                  "phoneNumber": "+910000000000",
                  "location": "Test Location"
              }
          ]
      }
  ]
};


obj.data = obj.data.reduce((a, c) => {
    a.push(...c.Here);
    return a;
}, [])
console.log(obj);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...