Operador de mongodb $ ifnull

Operador de mongodb $ ifnull

Enquanto usamos operadores, podemos não apenas fazer comparações entre operando, mas também podemos procurar os valores ausentes, atualizar os registros e muitos mais. O operador ifnull do MongoDB, um desses operadores, tem seu lugar especial porque verifica se o campo específico contém um valor nulo ou não. Se o campo específico tiver um valor nulo, podemos executar de acordo: substituir o valor por um novo valor ou torná -lo vazio. Neste tutorial, você aprenderá o uso do operador IFNULL do MongoDB usando o MongoDB Shell. Portanto, você deve ter o MongoDB instalado junto com suas dependências.

Crie banco de dados e coleção

Vamos passar em direção à implementação de algumas consultas no shell do MongoDB para exibir o uso do operador “ifnull” do MongoDBB. Antes disso, estamos dando uma olhada na disponibilidade dos bancos de dados atuais. Atualmente, temos 3 bancos de dados embutidos disponíveis em nosso mongodb, conforme a instrução "show dbs". Precisamos criar o banco de dados fictício que usaremos em nossos próximos exemplos. Para isso, devemos criar uma coleção de banco de dados primeiro.

Teste> Mostrar DBS
Admin 40.00 Kib
Config 60.00 Kib
Local 72.00 Kib

Ao verificar o total de coleções, temos em nosso banco de dados, descobrimos que não há coleção por enquanto e precisamos criar uma que seja a instrução "Show Collections".

Teste> Mostrar coleções

Para criar uma nova coleção, você deve executar o método "CreateCollection" de MongoDB em seu shell. Deve ter o nome de uma coleção recém -criada nos parâmetros, “dados”. O resultado da saída como ok: 1 mostra que sua coleção "dados" é gerada com sucesso.

Teste> dB.createCollection ("dados")
ok: 1

Ao procurar todas as coleções agora, você verá uma coleção recém -feita listada lá.

Teste> Mostrar coleções
Dados

Depois de gerar uma nova coleção no banco de dados do MongoDB, quando pesquisamos o banco de dados, o banco de dados "teste" que usamos sem sequer criar é exibido na lista.

Teste> Mostrar DBS
Admin 40.00 Kib
Config 108.00 Kib
Local 72.00 Kib
Teste 144.00 Kib

Insira registros na coleta

Por enquanto, você deve ter certeza de que a coleção "dados" está vazia, pois não adicionamos nenhum registro a ele. Portanto, uma coleção vazia não faz sentido e precisamos inserir documentos nela. Como trabalhamos para o operador "$ ifnull", devemos adicionar os campos com valores nulos também. Portanto, começando com a inserção de novos registros documentados na coleção "Data", tentamos a função insertMany () do mongodb para inserir mais de um registro de uma só vez. A inserção de um total de 6 registros ocorreu em um passo.

Os registros devem estar em um formato de matriz ou colchetes no início e no final dos registros. Cada registro deve ser separado por uma vírgula ", e suportes curly" ". Quase todos os registros têm pelo menos 2 campos: "Nome" e "Age". Enquanto todos os campos de "nome" contêm um valor de string, existem alguns registros em que o campo "Age" não contém nenhum registro, valor nulo ou indefinido. Após a execução bem -sucedida desta consulta de inserção para a coleção "Data", você receberá o reconhecimento na tela de shell do MongoDB exibindo os IDs gerados automaticamente para cada registro.

Teste> dB.Dados.InsertMany ([nome: "Peter", idade: 24, name: "ana", idade: null, name: "bryan", idade: "", name: "nina", idade: 33 , Nome: "John", Nome: "Michael", Age: Undefined])

reconhecido: verdadeiro,
inserdids:
'0': objectId ("63bc3f53a2e5d7c94c4de66b"),
'1': objectId ("63BC3F53A2E5D7C94C4DE66C"),
'2': objectId ("63BC3F53A2E5D7C94C4DE66D"),
'3': objectId ("63bc3f53a2e5d7c94c4de66e"),
'4': objectId ("63bc3f53a2e5d7c94c4de66f")
'5': objectId ("63bcbf7552359fabfc4a770e")

Depois de inserir um total de 6 registros com sucesso na coleção "Data" do banco de dados de "teste" do MongoDB, você também precisa dar uma olhada em todos esses registros. Para isso, você precisa exibir cada um dos registros de coleta "Data" no formato JSON usando a função foreach (). Para isso, você deve encontrar todos os registros através da função "Localizar" e depois aplicar a função foreach (), conforme exibido na saída abaixo. O argumento "printjson" é um must-have aqui. A saída para exibir todos os 6 registros da coleção "dados" no formato JSON está anexada abaixo.

Teste> dB.Dados.encontrar().foreach (printjson)
_id: objectId ("63bc3f53a2e5d7c94c4de66b"), nome: 'Peter', idade: 24
_id: objectId ("63bc3f53a2e5d7c94c4de66c"), nome: 'ana', idade: null
_id: objectId ("63bc3f53a2e5d7c94c4de66d"), nome: 'Bryan', idade: "
_id: objectId ("63bc3f53a2e5d7c94c4de66e"), nome: 'nina', idade: 33
_id: objectId ("63bc3f53a2e5d7c94c4de66f"), nome: 'John'
_id: objectId ("63bcbf7552359fabfc4a770e"), nome: 'Michael', idade: null

Aplique o operador “ifnull” no campo “Age” da coleção “Data”, pois contém valores indefinidos e nulos nos documentos. A função agregada () de um mongodb deve ser utilizada para usar o operador "ifnull" no campo "Age". Portanto, começamos a consulta com o nome de uma coleção. É seguido pela função "agregada" que contém o operador do projeto para projetar no campo específico no qual o operador "ifnull" será aplicado. O campo "Nome" está definido como 1 para que possa ser exibido. O operador "ifnull" contém dois argumentos como ["", ""] aplicado ao campo "Idade". A saída desta consulta mostra a idade: ”que substituiu os valores da idade por nada. Isso ocorre porque não definimos o nome de um campo de "idade" no primeiro argumento de um operador IFNULL.

Teste> dB.Dados.agregado ([$ Project: nome: 1, idade: $ ifnull: ["", ""]])
[[
_id: objectId ("63bcb7a552359fabfc4a7701"), nome: 'Peter', idade: ",
_id: objectId ("63bcb7a552359fabfc4a7702"), nome: 'ana', idade: ",
_id: objectId ("63bcb7c352359fabfc4a7703"), nome: 'Bryan', idade: ",
_id: objectId ("63bcb7c352359fabfc4a7704"), nome: 'nina', idade: ",
_id: objectId ("63bcb7d052359fabfc4a7705"), nome: 'John', idade: ",
_id: objectId ("63bcbf7552359fabfc4a770e"), nome: 'Michael', idade: "
]

Quando você usa qualquer expressão de string no primeiro argumento do operador “ifnull”, ele substituirá todos os valores de um campo de “idade” com essa string. Na saída mostrada abaixo, usamos a string "indefinida" e tomou o lugar dos valores originais no campo de idade de todos os registros.

Teste> dB.Dados.agregado ([$ Project: nome: 1, idade: $ ifnull: ["indefinido", ""]])
[[
_id: objectId ("63bcb7a552359fabfc4a7701"), nome: 'Peter', idade: 'indefinido',
_id: objectId ("63bcb7a552359fabfc4a7702"), nome: 'ana', idade: 'indefinido',
_id: objectId ("63bcb7c352359fabfc4a7703"), nome: 'Bryan', idade: 'indefinido',
_id: objectId ("63bcb7c352359fabfc4a7704"), nome: 'nina', idade: 'indefinido',
_id: objectId ("63bcb7d052359fabfc4a7705"), nome: 'John', idade: 'indefinido',
_id: objectId ("63bcbf7552359fabfc4a770e"), nome: 'Michael', idade: 'indefinido'
]

Para evitar isso, teremos que usar o campo "Age" como o primeiro argumento para o operador IFNULL junto com o sinal "$". Então, deixe o segundo argumento estar vazio eu.e., segundo argumento como seu valor. Na execução desta instrução agregada, estaremos exibindo a saída anexada abaixo. Agora, você pode ver que o campo de idade está exibindo seus valores originais onde não há valor "nulo". Além disso, onde os valores são nulos ou indefinidos, o campo etário é substituído por vazio ”.

Teste> dB.Dados.agregado ([$ Project: Nome: 1, idade: $ ifnull: ["$ AGE", ""]]))
[[
_id: objectId ("63bcb7a552359fabfc4a7701"), nome: 'Peter', idade: 24,
_id: objectId ("63bcb7a552359fabfc4a7702"), nome: 'ana', idade: ",
_id: objectId ("63bcb7c352359fabfc4a7703"), nome: 'Bryan', idade: ",
_id: objectId ("63bcb7c352359fabfc4a7704"), nome: 'nina', idade: 33,
_id: objectId ("63bcb7d052359fabfc4a7705"), nome: 'John', idade: ",
_id: objectId ("63bcbf7552359fabfc4a770e"), nome: 'Michael', idade: "
]

Vamos dar uma olhada em diferentes valores de saída para os valores nulos do campo "Idade" usando o operador IFNULL na instrução agregada. Desta vez, estamos usando a string "NULL VALUE" como o segundo argumento do operador IFNULL para substituir os valores nulos no campo "Age". O resultado anexado abaixo exibiu a substituição de valores nulos pela string "NULL Value".

Teste> dB.Dados.agregado ([$ Project: nome: 1, idade: $ ifnull: ["$ AGE", "NULL VALUE"]])
[[
_id: objectId ("63bcb7a552359fabfc4a7701"), nome: 'Peter', idade: 24,
_id: objectId ("63bcb7a552359fabfc4a7702"), nome: 'ana', idade: 'valor nulo',
_id: objectId ("63bcb7c352359fabfc4a7703"), nome: 'Bryan', idade: ",
_id: objectId ("63bcb7c352359fabfc4a7704"), nome: 'nina', idade: 33,
_id: objectId ("63bcb7d052359fabfc4a7705"), nome: 'John', idade: 'valor nulo',
_id: objectId ("63bcbf7552359fabfc4a770e"), nome: 'Michael', idade: 'valor nulo'
]

Conclusão

Este artigo contém uma discussão sobre o uso do operador IFNULL, a partir de sua introdução à ilustração final. As ilustrações demonstram como um valor “nulo” original de um determinado campo pode ser substituído por um novo valor. Depois de discutir todo o procedimento de usar o operador IFNULL na função agregada do MongoDB, chegamos ao resultado de que o primeiro argumento do operador IFNULL deve ser um nome de campo com um caractere "$" para evitar complicações.