Какво ще кажете за:
db.users.find({ "name": { "$exists": true } }).sort({'name': 1})
Защото в края на краищата, когато поле, по което искате да сортирате, действително не присъства, тогава върнатата стойност е null
и следователно "по-ниско" в реда от всеки положителен резултат. Така че има смисъл да изключите тези резултати, ако наистина търсите само нещо със съответстваща стойност.
Ако наистина искате всички резултати там и независимо от null
съдържание, тогава предлагам да ги "претеглите" чрез .aggregate()
:
db.users.aggregate([
{ "$project": {
"name": 1,
"score": {
"$cond": [
{ "$ifNull": [ "$name", false ] },
1,
10
]
}
}},
{ "$sort": { "score": 1, "name": 1 } }
])
И това премества всички null
води до „края на веригата“, като присвоява стойност като такава.