как отсортировать массив внутри коллекции в mongoDB, используя node js - PullRequest
0 голосов
/ 18 марта 2020

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

[
    {
        "_id": "5e71fa3ab004192b349e4a06",
        "QUERIES": [
            {
                "_id": "5e71fa3ab004192b349e4a07",
                "QUERY": "1",
                "USER_ID": "5e6f1c5b8451307f782d0994",
                "USER_NAME": "a2",
                "createdAt": "2020-03-18T10:38:50.247Z"
            },
            {
                "_id": "5e71fa46b004192b349e4a08",
                "QUERY": "2",
                "USER_ID": "5e6f1c5b8451307f782d0994",
                "USER_NAME": "a1",
                "createdAt": "2020-03-18T10:39:02.451Z"
            }
        ],
        "TICKET_ID": "5e70f4fa47df9479502f7937"
]

Ожидаемый результат

[
        {
            "_id": "5e71fa3ab004192b349e4a06",
            "QUERIES": [

                {
                    "_id": "5e71fa46b004192b349e4a08",
                    "QUERY": "2",
                    "USER_ID": "5e6f1c5b8451307f782d0994",
                    "USER_NAME": "a1",
                    "createdAt": "2020-03-18T10:39:02.451Z"
                },
                {
                    "_id": "5e71fa3ab004192b349e4a07",
                    "QUERY": "1",
                    "USER_ID": "5e6f1c5b8451307f782d0994",
                    "USER_NAME": "a2",
                    "createdAt": "2020-03-18T10:38:50.247Z"
                }
            ],
            "TICKET_ID": "5e70f4fa47df9479502f7937"
    ]

1 Ответ

0 голосов
/ 18 марта 2020

Используйте это:

db.collection.aggregate([
   { $unwind: "$QUERIES" },
   { $sort: { "QUERIES.createdAt": -1 } },
   {
      $group: {
         _id: { _id: "$_id", TICKET_ID: "$TICKET_ID" },
         QUERIES: { $push: "$QUERIES" }
      }
   },
   { $replaceRoot: { newRoot: { $mergeObjects: ["$$ROOT", "$_id"] } } }
])

Пн go детская площадка

...