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.