Пн go Агрегат БД - сохранить результаты, даже если результат не найден - PullRequest
0 голосов
/ 13 февраля 2020

Я пытаюсь создать агрегированный конвейер, в котором я знаю, что последнее совпадение не даст результата, но я все еще хочу получить то, что я получил, пока там. Знаете ли вы, как я могу это получить?

Запрос агрегации:

var pipeline = [
    {
        $match:{
            Cod: '5'
        }
    },
    {
        $unwind: '$Orgaos'
    },
    {
        $match:{
            'Orgaos.Siglas': 'PR'
        }
    },
    {
        $lookup:{
            'from': 'Varas',
            'localField': 'Orgaos.Varas',
            'foreignField': '_id',
            'as': 'Varas'
        }
    },
    {
        $unwind: '$Varas'
    },
    {
        $match:{
            'Varas.CodVara': '9001'
        }
    }
]
db.getCollection('Tribunais').aggregate(pipeline)

Результат, если $ match найдет что-нибудь, будет похож на:

{
    "_id" : ObjectId("5c335bdd20681573e41878ad"),
    "Nome" : "TRT",
    "Cod" : "5",
    "Orgaos" : {
        "Orgao" : "09",
        "Siglas" : [ 
            "PR"
        ],
        "Varas" : [ ]
    },
    "Varas" : {
        "_id" : ObjectId("5cf55fc2cb865b5038310e0c"),
        "CodVara" : "0001",
        "NomeVara" : "01ª VARA DO TRABALHO DE CURITIBA",
        "Comarca" : "CURITIBA",
        "Uf" : "PR"
    }
}

И если он ничего не находит, я ожидаю получить что-то вроде:

{
    "_id" : ObjectId("5c335bdd20681573e41878ad"),
    "Nome" : "TRT",
    "Cod" : "5",
    "Orgaos" : {
        "Orgao" : "09",
        "Siglas" : [ 
            "PR"
        ],
        "Varas" : [ ]
    },
    "Varas" : { }
}

Или как:

{
    "_id" : ObjectId("5c335bdd20681573e41878ad"),
    "Nome" : "TRT",
    "Cod" : "5",
    "Orgaos" : {
        "Orgao" : "09",
        "Siglas" : [ 
            "PR"
        ],
        "Varas" : [ ]
    },
    "Varas" : Null
}

ткс

РЕДАКТИРОВАТЬ

Трибуна

{
    "_id" : ObjectId("5c335bdd20681573e41878ad"),
    "Nome" : "TRT",
    "Cod" : "5",
    "Orgaos" : [ 
        {
            "Orgao" : "23",
            "Siglas" : [ 
                "MT"
            ],
            "Varas" : [ 
                ObjectId("5cf55fc5cb865b503831104e"), 
                ObjectId("5cf55fc5cb865b503831104f"), 
                ObjectId("5cf55fc5cb865b5038311050"), 
                ObjectId("5cf55fc5cb865b5038311051"), 
                ObjectId("5cf55fc5cb865b5038311052"), 
                ObjectId("5cf55fc5cb865b5038311053"), 
                ObjectId("5cf55fc5cb865b5038311054"), 
                ObjectId("5cf55fc5cb865b5038311055"), 
                ObjectId("5cf55fc5cb865b5038311056"), 
                ObjectId("5cf55fc5cb865b5038311057"), 
                ObjectId("5cf55fc5cb865b5038311058"), 
                ObjectId("5cf55fc5cb865b5038311059"), 
                ObjectId("5cf55fc5cb865b503831105a"), 
                ObjectId("5cf55fc5cb865b503831105b"), 
                ObjectId("5cf55fc5cb865b503831105c"), 
                ObjectId("5cf55fc5cb865b503831105d"), 
                ObjectId("5cf55fc5cb865b503831105e"), 
                ObjectId("5cf55fc5cb865b503831105f"), 
                ObjectId("5cf55fc5cb865b5038311060"), 
                ObjectId("5cf55fc5cb865b5038311061"), 
                ObjectId("5cf55fc5cb865b5038311062"), 
                ObjectId("5cf55fc5cb865b5038311063"), 
                ObjectId("5cf55fc5cb865b5038311064"), 
                ObjectId("5cf55fc5cb865b5038311065"), 
                ObjectId("5cf55fc5cb865b5038311066"), 
                ObjectId("5cf55fc5cb865b5038311067")
            ]
        }, 
        {
            "Orgao" : "24",
            "Siglas" : [ 
                "MS"
            ],
            "Varas" : [ 
                ObjectId("5cf55fc5cb865b5038311068"), 
                ObjectId("5cf55fc5cb865b5038311069"), 
                ObjectId("5cf55fc5cb865b503831106a"), 
                ObjectId("5cf55fc5cb865b503831106b"), 
                ObjectId("5cf55fc5cb865b503831106c"), 
                ObjectId("5cf55fc5cb865b503831106d"), 
                ObjectId("5cf55fc5cb865b503831106e"), 
                ObjectId("5cf55fc5cb865b503831106f"), 
                ObjectId("5cf55fc5cb865b5038311070"), 
                ObjectId("5cf55fc5cb865b5038311071"), 
                ObjectId("5cf55fc5cb865b5038311072"), 
                ObjectId("5cf55fc5cb865b5038311073"), 
                ObjectId("5cf55fc5cb865b5038311074"), 
                ObjectId("5cf55fc5cb865b5038311075"), 
                ObjectId("5cf55fc5cb865b5038311076"), 
                ObjectId("5cf55fc5cb865b5038311077"), 
                ObjectId("5cf55fc5cb865b5038311078"), 
                ObjectId("5cf55fc5cb865b5038311079"), 
                ObjectId("5cf55fc5cb865b503831107a"), 
                ObjectId("5cf55fc5cb865b503831107b"), 
                ObjectId("5cf55fc5cb865b503831107c"), 
                ObjectId("5cf55fc5cb865b503831107d"), 
                ObjectId("5cf55fc5cb865b503831107e"), 
                ObjectId("5cf55fc5cb865b503831107f"), 
                ObjectId("5cf55fc5cb865b5038311080"), 
                ObjectId("5cf55fc5cb865b5038311081")
            ]
        }
    ]
}

Варас

{
    "_id" : ObjectId("5cf55fc5cb865b503831104e"),
    "CodVara" : "0001",
    "NomeVara" : "1ª Vara do Trabalho de Cuiabá",
    "Comarca" : "Cuiabá",
    "Uf" : "MT"
},
{
    "_id" : ObjectId("5cf55fc5cb865b503831104f"),
    "CodVara" : "0002",
    "NomeVara" : "2ª Vara do Trabalho de Cuiabá",
    "Comarca" : "Cuiabá",
    "Uf" : "MT"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311050"),
    "CodVara" : "0003",
    "NomeVara" : "3ª Vara do Trabalho de Cuiabá",
    "Comarca" : "Cuiabá",
    "Uf" : "MT"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311051"),
    "CodVara" : "0004",
    "NomeVara" : "4ª Vara do Trabalho de Cuiabá",
    "Comarca" : "Cuiabá",
    "Uf" : "MT"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311052"),
    "CodVara" : "0005",
    "NomeVara" : " 5ª Vara do Trabalho de Cuiabá",
    "Comarca" : "Cuiabá",
    "Uf" : "MT"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311053"),
    "CodVara" : "0006",
    "NomeVara" : "6ª Vara do Trabalho de Cuiabá",
    "Comarca" : "Cuiabá",
    "Uf" : "MT"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311054"),
    "CodVara" : "0007",
    "NomeVara" : "7ª Vara do Trabalho de Cuiabá",
    "Comarca" : "Cuiabá",
    "Uf" : "MT"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311055"),
    "CodVara" : "0008",
    "NomeVara" : "8ª Vara do Trabalho de Cuiabá",
    "Comarca" : "Cuiabá",
    "Uf" : "MT"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311056"),
    "CodVara" : "0009",
    "NomeVara" : " 9ª Vara do Trabalho de Cuiabá",
    "Comarca" : "Cuiabá",
    "Uf" : "MT"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311057"),
    "CodVara" : "0021",
    "NomeVara" : " 1ª Vara do Trabalho de Rondonópolis",
    "Comarca" : "Rondonópolis",
    "Uf" : "MT"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311058"),
    "CodVara" : "0022",
    "NomeVara" : "2ª Vara do Trabalho de Rondonópolis",
    "Comarca" : "Rondonópolis",
    "Uf" : "MT"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311059"),
    "CodVara" : "0026",
    "NomeVara" : "Vara do Trabalho de Barra do Garças",
    "Comarca" : "Barra do Garças",
    "Uf" : "MT"
},
{
    "_id" : ObjectId("5cf55fc5cb865b503831105a"),
    "CodVara" : "0031",
    "NomeVara" : "Vara do Trabalho de Cáceres",
    "Comarca" : "Cáceres",
    "Uf" : "MT"
},
{
    "_id" : ObjectId("5cf55fc5cb865b503831105b"),
    "CodVara" : "0036",
    "NomeVara" : "Vara do Trabalho de Sinop",
    "Comarca" : "Sinop",
    "Uf" : "MT"
},
{
    "_id" : ObjectId("5cf55fc5cb865b503831105c"),
    "CodVara" : "0041",
    "NomeVara" : "Vara do Trabalho de Colíder",
    "Comarca" : "Colíder",
    "Uf" : "MT"
},
{
    "_id" : ObjectId("5cf55fc5cb865b503831105d"),
    "CodVara" : "0046",
    "NomeVara" : "Vara do Trabalho de Alta Floresta",
    "Comarca" : "Alta Floresta",
    "Uf" : "MT"
},
{
    "_id" : ObjectId("5cf55fc5cb865b503831105e"),
    "CodVara" : "0051",
    "NomeVara" : "Vara do Trabalho de Tangará da Serra",
    "Comarca" : "Tangará da Serra",
    "Uf" : "MT"
},
{
    "_id" : ObjectId("5cf55fc5cb865b503831105f"),
    "CodVara" : "0056",
    "NomeVara" : "Vara do Trabalho de Diamantino",
    "Comarca" : "Diamantino",
    "Uf" : "MT"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311060"),
    "CodVara" : "0061",
    "NomeVara" : "Vara do Trabalho de São Félix do Araguaia",
    "Comarca" : "São Félix do Araguaia",
    "Uf" : "MT"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311061"),
    "CodVara" : "0066",
    "NomeVara" : "Vara do Trabalho de Sorriso",
    "Comarca" : "Sorriso",
    "Uf" : "MT"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311062"),
    "CodVara" : "0071",
    "NomeVara" : "Vara do Trabalho de Jaciara",
    "Comarca" : "Jaciara",
    "Uf" : "MT"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311063"),
    "CodVara" : "0076",
    "NomeVara" : " Vara do Trabalho de Primavera do Leste",
    "Comarca" : "Primavera do Leste",
    "Uf" : "MT"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311064"),
    "CodVara" : "0081",
    "NomeVara" : "Vara do Trabalho de Juína",
    "Comarca" : "Juína",
    "Uf" : "MT"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311065"),
    "CodVara" : "0086",
    "NomeVara" : "Vara do Trabalho de Água Boa",
    "Comarca" : "Água Boa",
    "Uf" : "MT"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311066"),
    "CodVara" : "0091",
    "NomeVara" : "Vara do Trabalho de Mirassol D'Oeste",
    "Comarca" : "Mirassol D'Oeste",
    "Uf" : "MT"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311067"),
    "CodVara" : "0096",
    "NomeVara" : "Vara do Trabalho de Pontes e Lacerda",
    "Comarca" : "Pontes e Lacerda",
    "Uf" : "MT"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311068"),
    "CodVara" : "0001",
    "NomeVara" : "1ª vara do trabalho de campo grande",
    "Comarca" : "Campo Grande",
    "Uf" : "MS"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311069"),
    "CodVara" : "0002",
    "NomeVara" : "2ª vara do trabalho de campo grande",
    "Comarca" : "Campo Grande",
    "Uf" : "MS"
},
{
    "_id" : ObjectId("5cf55fc5cb865b503831106a"),
    "CodVara" : "0003",
    "NomeVara" : "3ª vara do trabalho de campo grande",
    "Comarca" : "Campo Grande",
    "Uf" : "MS"
},
{
    "_id" : ObjectId("5cf55fc5cb865b503831106b"),
    "CodVara" : "0004",
    "NomeVara" : "4ª vara do trabalho de campo grande",
    "Comarca" : "Campo Grande",
    "Uf" : "MS"
},
{
    "_id" : ObjectId("5cf55fc5cb865b503831106c"),
    "CodVara" : "0005",
    "NomeVara" : "5ª vara do trabalho de campo grande",
    "Comarca" : "Campo Grande",
    "Uf" : "MS"
},
{
    "_id" : ObjectId("5cf55fc5cb865b503831106d"),
    "CodVara" : "0006",
    "NomeVara" : "6ª vara do trabalho de campo grande",
    "Comarca" : "Campo Grande",
    "Uf" : "MS"
},
{
    "_id" : ObjectId("5cf55fc5cb865b503831106e"),
    "CodVara" : "0007",
    "NomeVara" : "7ª vara do trabalho de campo grande",
    "Comarca" : "Campo Grande",
    "Uf" : "MS"
},
{
    "_id" : ObjectId("5cf55fc5cb865b503831106f"),
    "CodVara" : "0021",
    "NomeVara" : "1ª vara do trabalho de dourados",
    "Comarca" : "Dourados",
    "Uf" : "MS"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311070"),
    "CodVara" : "0022",
    "NomeVara" : "2ª vara do trabalho de dourados",
    "Comarca" : "Dourados",
    "Uf" : "MS"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311071"),
    "CodVara" : "0031",
    "NomeVara" : "vara do trabalho de aquidauana",
    "Comarca" : "Aquidauana",
    "Uf" : "MS"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311072"),
    "CodVara" : "0036",
    "NomeVara" : "vara do trabalho de amambai",
    "Comarca" : "Amambai",
    "Uf" : "MS"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311073"),
    "CodVara" : "0041",
    "NomeVara" : "vara do trabalho de corumbá",
    "Comarca" : "Corumbá",
    "Uf" : "MS"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311074"),
    "CodVara" : "0046",
    "NomeVara" : "1º vara do trabalho de coxim",
    "Comarca" : "Coxim",
    "Uf" : "MS"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311075"),
    "CodVara" : "0051",
    "NomeVara" : "vara do trabalho de mundo novo",
    "Comarca" : "Mundo Novo",
    "Uf" : "MS"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311076"),
    "CodVara" : "0056",
    "NomeVara" : "vara do trabalho de nova andradina",
    "Comarca" : "Nova Andradina",
    "Uf" : "MS"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311077"),
    "CodVara" : "0061",
    "NomeVara" : "vara do trabalho de paranaíba",
    "Comarca" : "Paranaíba",
    "Uf" : "MS"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311078"),
    "CodVara" : "0066",
    "NomeVara" : "vara do trabalho de ponta porã",
    "Comarca" : "Ponta Porã",
    "Uf" : "MS"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311079"),
    "CodVara" : "0071",
    "NomeVara" : "1ª vara do trabalho de três lagoas",
    "Comarca" : "Três Lagoas",
    "Uf" : "MS"
},
{
    "_id" : ObjectId("5cf55fc5cb865b503831107a"),
    "CodVara" : "0072",
    "NomeVara" : "2ª vara do trabalho de três lagoas",
    "Comarca" : "Três Lagoas",
    "Uf" : "MS"
},
{
    "_id" : ObjectId("5cf55fc5cb865b503831107b"),
    "CodVara" : "0076",
    "NomeVara" : "vara do trabalho de jardim",
    "Comarca" : "Jardim",
    "Uf" : "MS"
},
{
    "_id" : ObjectId("5cf55fc5cb865b503831107c"),
    "CodVara" : "0081",
    "NomeVara" : "vara do trabalho de são gabriel do oeste",
    "Comarca" : "São Gabriel Do Oeste",
    "Uf" : "MS"
},
{
    "_id" : ObjectId("5cf55fc5cb865b503831107d"),
    "CodVara" : "0086",
    "NomeVara" : "vara do trabalho de naviraí",
    "Comarca" : "Naviraí",
    "Uf" : "MS"
},
{
    "_id" : ObjectId("5cf55fc5cb865b503831107e"),
    "CodVara" : "0091",
    "NomeVara" : "vara do trabalho de rio brilhante",
    "Comarca" : "Rio Brilhante",
    "Uf" : "MS"
},
{
    "_id" : ObjectId("5cf55fc5cb865b503831107f"),
    "CodVara" : "0096",
    "NomeVara" : "vara do trabalho de bataguassu",
    "Comarca" : "Bataguassu",
    "Uf" : "MS"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311080"),
    "CodVara" : "0101",
    "NomeVara" : "vara do trabalho de cassilândia",
    "Comarca" : "Cassilândia",
    "Uf" : "MS"
},
{
    "_id" : ObjectId("5cf55fc5cb865b5038311081"),
    "CodVara" : "0106",
    "NomeVara" : "vara do trabalho de fátima do sul",
    "Comarca" : "Fátima Do Sul",
    "Uf" : "MS"
}

1 Ответ

1 голос
/ 14 февраля 2020

Вы можете сделать это, используя $ addFields & $ cond , который условно добавляет то же поле Varas или null, поэтому добавьте этот этап как последний этап в существующий конвейер :

{$addFields : {Varas: { $cond: [ {$eq : ['$Varas.CodVara', '9001']}, '$Varas', null ] }}}

Запрос:

db.getCollection('Tribunais').aggregate([
    {
        $match: {
            Cod: '5'
        }
    },
    {
        $unwind: '$Orgaos'
    },
    {
        $match: {
            'Orgaos.Siglas': 'MS'
        }
    },
    {
        $lookup: {
            'from': 'Varas',
            'localField': 'Orgaos.Varas',
            'foreignField': '_id',
            'as': 'Varas'
        }
    },
    {
        $unwind: '$Varas'
    }, { $addFields: { Varas: { $cond: [{ $eq: ['$Varas.CodVara', '9001'] }, '$Varas', null] } } }
])
...