Есть какая то рандомная коллекция, примера:
[
{_id: ..., ratingPosition: 1},
{_id: ..., ratingPosition: 2},
{_id: ... }, <== Без параметра ratingPosition
]
Мне нужно выводить все документы, но изначально ratingPosition от меньшего к большему (1, 2, 3...) и только после отсутсвующие поля ratingPosition.
Делая сортировку {ratingPosition: -1} позиции сортируются от большего к меньшему, после элементы без значений.
{ratingPosition: 1} изначально элементы без значений, а после от меньшего к меньшему.
Вот подобный вопрос и возможные решения.
В голове есть решения, но они слишком сложные для такой задачи:
db.getCollection("goodsTreeNodes").aggregate(
[
{
"$facet" : {
"outputField1" : [
{
"$match" : {
"ratingPosition" : {
"$exists" : true
}
}
},
{
"$sort" : {
"ratingPosition" : 1.0
}
}
],
"outputField2" : [
{
"$match" : {
"ratingPosition" : {
"$exists" : false
}
}
},
{
"$sort" : {
"name" : 1.0
}
}
]
}
},
{
"$project" : {
"result" : {
"$concatArrays" : [
"$outputField1",
"$outputField2"
]
}
}
},
{
"$unwind" : {
"path" : "$result",
"includeArrayIndex" : "arrayIndex",
"preserveNullAndEmptyArrays" : false
}
},
{
"$replaceRoot" : {
"newRoot" : "$result"
}
}
],
{
"allowDiskUse" : false
}
);
Посоветуйте что нибудь попроще. Спасибо