У меня есть такие документы -
{
"Details": "WorkProfile" : [
{
"Company" : "UPS",
"JobTitle" : "Preload Package Handler",
"JobSkills" : {
"CommonSkills" : [
ObjectId("5ad5ab860b94c96c738e911e")
],
"OtherSkills" : [
ObjectId("5ad5ab860b94c96c738e9208")
]
}
},
{
"Company" : "L&L Tent and Party",
"JobTitle" : "Delivery Driver/ Tent Installation",
"JobSkills" : {
"CommonSkills" : [
ObjectId("5ad5ab860b94c96c738e9227")
],
"OtherSkills" : [ ]
}
},
{
"Company" : "All Pro Movers",
"JobTitle" : "Mover"
},
{
"Company" : "Carolina Farmin",
"JobTitle" : "Head of Cullinary"
}
],
}
Я хочу получить OtherSkills
для каждого поддокумента в разделе WorkProfile
. Я пробовал следующее
db.Collection.aggregate([{$match: {"DocId": "669f4a8f-13cd-4780-8115-e3f29b0d9b4f"}}, {$project: {"JobSkills": "$Details.WorkProfile.JobSkills.OtherSkills"}}]).pretty()
{
"_id" : ObjectId("5ad5ab89af2808b739ba6aac"),
"JobSkills" : [
[
ObjectId("5ad5ab860b94c96c738e9208")
],
[ ]
]
}
Теперь я хочу установить значение по умолчанию для поля, если поле не существует в этом поддокументе. Для этого я попытался использовать команду $ ifNull , подобную этой
db.ResumeParsedData.aggregate([{$match: {"DocId": "669f4a8f-13cd-4780-8115-e3f29b0d9b4f"}}, {$project: {"JobSkills": {$ifNull: ["$ResumeDetails.WorkProfile.JobSkills.OtherSkills", "null"]}}}]).pretty()
{
"_id" : ObjectId("5ad5ab89af2808b739ba6aac"),
"JobSkills" : [
[
ObjectId("5ad5ab860b94c96c738e9208")
],
[ ]
]
}
Но я получаю тот же результат, что и в моем первом запросе. Как указать значение по умолчанию для поля, если поле не существует во вложенном документе.
Я ожидаю этот вывод для вышеуказанного документа -
{
"_id" : ObjectId("5ad5ab89af2808b739ba6aac"),
"JobSkills" : [
[
ObjectId("5ad5ab860b94c96c738e9208")
],
[ ],
"null",
"null"
]
}