Как отсортировать документы в mongodb так, чтобы нулевые значения появлялись последними - PullRequest
0 голосов
/ 25 февраля 2019

Допустим, мой монго-документ выглядит следующим образом:

{
  _id: "some _id",
  name: "some name",
  type: "A" | "B" | "C" | or it may be null
}

Когда я звоню db.getCollection('mycollection').find().sort({ type: -1 }) Сначала я получаю документы с type: null, потому что данные сортируются по каноническому типу, где нольимеет намного более низкое каноническое значение, чем число / строка

Есть ли способ сформировать запрос, чтобы нулевые значения были последними?

Я нашел этот вопрос Как я могу разобрать, что нули последний раз упорядочены в mongodb? но там предлагается использовать агрегацию и добавлять "поддельные" значения, что мне не кажется хорошим.

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

1 Ответ

0 голосов
/ 25 февраля 2019

Вы можете использовать оператор $ type , чтобы получить тип поля (null или string), а затем $ sort по типу поля плюс затем по полю, попробуйте:

db.col.aggregate([
    { $addFields: { fieldType: { $type: "$type" } } },
    { $sort: { fieldType: -1, type: 1 } },
    { $project: { "fieldType": 0 } }
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...