Сортировка результатов запроса по порядку элементов в предоставленном массиве условий в Mongoose - PullRequest
0 голосов
/ 06 декабря 2018

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

Например, если япредоставил Mongoose этот массив ["112", "111", "113"] и при условии, что все документы с этими идентификаторами существуют, в результате будет получен массив документов, упорядоченный в соответствии с: [{//112},{//111},{//113}]

Просто чтобы быть кристально чистым, мне не нужнодля сортировки массива по любому конкретному полю документа - я ищу способ сказать Mongoose сортировать по порядку идентификаторов, представленных в самом массиве условий.Это возможно?

1 Ответ

0 голосов
/ 06 декабря 2018

С учетом следующих данных:

db.col.save({ a: "111"})
db.col.save({ a: "112"})
db.col.save({ a: "113"})
db.col.save({ a: "114"})

вы можете использовать $ match Aggregation Framework для фильтрации всех элементов, которые отсутствуют в указанном массиве и $ addFields с $ indexOfArray , чтобы получить свойство index.Затем вы можете $ sort по этому свойству и использовать $ project для удаления временного поля.Попробуйте:

db.col.aggregate([
    {
        $match: { a: { $in: ["112", "111", "113"] } }
    },
    {
        $addFields: {
            index: { $indexOfArray: [ ["112", "111", "113"], "$a" ] }
        }
    },
    {
        $sort: { index: 1 }
    },
    {
        $project: { index: 0, _id: 0 }
    }
])

Выходы:

{ "a" : "112" }
{ "a" : "111" }
{ "a" : "113" }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...