Вы можете использовать aggregation framework для преобразования данных в форму, где вы можете sort
это так, как вы хотите. Попробуйте агрегацию запрос:
db.yourCollection.aggregate(
[
{$project:
{
first: 1,
rest: {$cond: [{$eq: ['$middle', '']},
'$last', '$middle']},
isMiddle: {$cond: [{$eq: ['$middle', '']}, false, true]}
}
},
{$sort: {rest: 1}},
{$project:
{
first: 1,
middle: {$cond: ['$isMiddle', '$rest', '']},
last: {$cond: ['$isMiddle', '', '$rest']}
}
}
]
)
Это поможет вам, что вы хотите:
{ "first" : "Some", "middle" : "A", "last" : "" }
{ "first" : "Some", "middle" : "B", "last" : "" }
{ "first" : "Some", "middle" : "", "last" : "C" }
{ "first" : "Some", "middle" : "D", "last" : "" }
Проблема с обычной сортировкой, что middle
и last
отдельные ключи и сортируется самостоятельно (хотя стабильно). Таким образом, единственный способ достичь вашей цели - объединить их в один ключ.
Возможно ли, чтобы вы перевели свой комментарий в форме запроса –