Проект MongoDB с проверкой наличия поля - PullRequest
0 голосов
/ 04 мая 2020

У меня есть документ ниже в БД,

db.inventory.insertMany([
   { "stageId" : 1 , "eventId" : 1 , "type" : "DataCard", "content " : { "en" : "English Content" }},
   { "stageId" : 1 , "eventId" : 1 , "type" : "DataCard", "content " : { "en" : "English Content", "fr" : "French Content" }},
])

Мне нужно спроецировать контент на основе существования полей. Если французский контент существует, то французский, иначе Engli sh

{
    type : "DataCard",
    content : "English Content" 
}
{
    type : "DataCard",
    content : "French Content"
}

Я использовал запрос ниже,

db.getCollection('inventory').aggregate([{ $project: { content: {$ifNull: ['$content.fr', '$content.en'] } , type : 1}}])

Но он возвращает только поле типа.

Is есть ли способ охватить этот сценарий?

Даже простой запрос для проецирования содержимого engli sh во всех случаях проецирует только поле типа

db.getCollection('inventory').aggregate(
    [
        {
            $project : {
                "type" : "$type", 
                "content" : "$content.en"
            }
        }
    ]
)
...