Есть ли способ отсортировать по двум полям одновременно в mongodb? Так скажем, у нас есть следующие документы в коллекции:Mongodb сортировать по любому из двух полей
{ id: 'name1', last_1: 5, last_2: 2 },
{ id: 'name2', last_1: 1, last_2: 9 },
{ id: 'name3', last_1: 4, last_2: 3 }
Я хочу, чтобы быть отсортированы в порядке убывания, проверяя как last_1 и last_2, так что результат будет: документ2 (9 в last_2), document1 (5 в последнем_1), документе3 (4 в последнем_1). Мне также нужно знать, в каком поле оно находится. Моя текущая агрегация выглядит следующим образом:
{ $group:
{ _id: { id: '$name' },
last_1: { $last: '$field1' },
last_2: { $last: '$field2' },
}
},
{ $sort : { /* don't know what to put in here */ } },
{ $limit: some_limit }
UPD: Я, возможно, придется удалить сортировки/ограничение на все и использовать некоторые функции пользовательского узла для этого, потому что это выглядит как я не могу достичь этого, используя только монго, особенно потому, что дополнительным требованием было бы перечислить один и тот же документ дважды, если оба его поля больше, чем в других документах.
Почти невозможно сказать без вашего собственного ввода, какое поле должно иметь приоритет в этом случае. Таким образом, единственным способом в настоящее время является присвоение весов этим полям для одного поля сортировки через структуру агрегации – Sammaye
Ни один из них не должен иметь приоритет, опять же, после группового этапа, который у меня есть, скажем, 5 документов, с последними значениями двух полей и я хочу, чтобы mongo принимало все 10 значений (5 docs * 2 последних значения), сортировать их и упорядочивать эти документы на основе первых 5 значений после сортировки. –
хорошо, вы говорите в своем примере, что doc 2 должен принимать last_2 как приоритет, так как это 9, тогда как doc1 должен принимать last_1 как приоритет, так как это 5, или я ошибаюсь? – Sammaye