Другой способ использования запроса агрегирования применим только для версии MongoDB> 3.4 -
. Благодарим вас за это сообщение .
Примеры документов для выбирается в этом порядке -
var order = [ "David", "Charlie", "Tess" ];
Запрос -
var query = [
{$match: {name: {$in: order}}},
{$addFields: {"__order": {$indexOfArray: [order, "$name" ]}}},
{$sort: {"__order": 1}}
];
var result = db.users.aggregate(query);
Еще одна цитата из сообщения, объясняющая эти операторы агрегирования -
Этап «$ addFields» является новым в версии 3.4 и позволяет вам «создавать» новые поля для существующих документов, не зная всех других существующих полей. Новое выражение «$ indexOfArray» возвращает позицию определенного элемента в заданном массиве.
В основном оператор
addToSet
добавляет новое полеorder
в каждый документ, когда он его находит, и это Полеorder
представляет собой первоначальный порядок нашего массива, который мы предоставили. Затем мы просто сортируем документы на основе этого поля.