MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

MongoDB $existe


No MongoDB, você pode usar o $exists operador de consulta de elemento para corresponder a documentos que contêm um campo específico.

Você também pode usá-lo para combinar documentos que não contêm um campo específico.

Você também pode usá-lo em conjunto com outros operadores como $nin para corresponder a documentos em que um determinado campo existe, mas não contém um valor específico.

Exemplo


Suponha que tenhamos uma coleção chamada cats que contém os seguintes documentos:
{ "_id" : 1, "name" : "Scratch", "born" : "March, 2020" }
{ "_id" : 2, "name" : "Meow", "weight" : 30 }
{ "_id" : 3, "name" : "Fluffy", "height" : 15 }
{ "_id" : 4, "name" : "Sox", "weight" : 40 }
{ "_id" : 5, "name" : null, "weight" : 20 }
{ "_id" : 6, "height" : 20, "born" : ISODate("2021-01-03T23:30:15.123Z") }

Esses documentos são ligeiramente inconsistentes em relação aos campos que possuem. Alguns têm um weight campo, outros têm uma height campo, alguns têm um born campo, etc.

Podemos usar o $exists operador para retornar documentos dessa coleção que possuem um campo específico.

Exemplo:
db.cats.find( { weight: { $exists: true } } )

Resultado:
{ "_id" : 2, "name" : "Meow", "weight" : 30 }
{ "_id" : 4, "name" : "Sox", "weight" : 40 }
{ "_id" : 5, "name" : null, "weight" : 20 }

Podemos ver que apenas os documentos que contêm um weight campo são retornados.

Campos que contêm null


O $exists operador inclui campos que contêm null . Não discrimina entre null e não-null valores.

Exemplo:
db.cats.find( { name: { $exists: true } } )

Resultado:
{ "_id" : 1, "name" : "Scratch", "born" : "March, 2020" }
{ "_id" : 2, "name" : "Meow", "weight" : 30 }
{ "_id" : 3, "name" : "Fluffy", "height" : 15 }
{ "_id" : 4, "name" : "Sox", "weight" : 40 }
{ "_id" : 5, "name" : null, "weight" : 20 }

Podemos ver que o documento 5 foi retornado, embora seu name campo é null .

Existe sem um valor específico


Você pode combinar $exists com outros operadores para retornar documentos que contêm o campo, mas esse campo não contém um valor específico.

Exemplo:
db.cats.find( { weight: { $exists: true, $nin: [20,30] } } )

Resultado:
{ "_id" : 4, "name" : "Sox", "weight" : 40 }

Este é um resultado diferente daquele que teríamos visto se tivéssemos simplesmente usado $nin sem o $exists operador.

Veja como seria:
db.cats.find( { weight: { $nin: [20,30] } } )

Resultado:
{ "_id" : 1, "name" : "Scratch", "born" : "March, 2020" }
{ "_id" : 3, "name" : "Fluffy", "height" : 15 }
{ "_id" : 4, "name" : "Sox", "weight" : 40 }
{ "_id" : 6, "height" : 20, "born" : ISODate("2021-01-03T23:30:15.123Z") }

Documentos que não contêm um campo específico


Você pode usar $exists: false para devolver documentos que não conter o campo especificado.

Exemplo:
db.cats.find( { name: { $exists: false } } )

Resultado:
{ "_id" : 6, "height" : 20, "born" : ISODate("2021-01-03T23:30:15.123Z") }

Nesse caso, um documento da coleção não contém o name campo.

Verificar vários campos


Você pode verificar a existência de vários campos separando-os com uma vírgula.

Exemplo:
db.cats.find( { 
  name: { $exists: true }, 
  height: { $exists: true } 
} )

Resultado:
{ "_id" : 3, "name" : "Fluffy", "height" : 15 }

Este exemplo retorna todos os documentos que contêm um name campo e uma height campo.