$ ifNull - это ваше решение:
с использованием следующих документов:
[
{
_id: 1,
name: "c"
},
{
_id: 2,
name: "a"
},
{
_id: 3,
lastname: "b"
},
{
_id: 4,
name: "d"
},
]
В следующем запросе будет указано имя проекта или фамилия, если имя не указано.существовать в качестве имени и сортировать по имени на втором этапе:
db.collection.aggregate([
{
$project: {
name: {
$ifNull: [
"$name",
"$lastname"
]
}
}
},
{
$sort: {
name: 1
}
}
])
В результате:
[
{
"_id": 2,
"name": "a"
},
{
"_id": 3,
"name": "b"
},
{
"_id": 1,
"name": "c"
},
{
"_id": 4,
"name": "d"
}
]
$ ifNull принимает массив из 2 параметров: если first равен нулю или нетприсутствует, затем используйте второй.