sql >> Base de Datos >  >> NoSQL >> MongoDB

MongoDB $existe

En MongoDB, puede usar $exists operador de consulta de elemento para hacer coincidir documentos que contienen un campo específico.

También puede usarlo para hacer coincidir documentos que no contienen un campo específico.

También puede usarlo junto con otros operadores como $nin para hacer coincidir documentos donde existe un campo dado, pero no contiene un valor específico.

Ejemplo

Supongamos que tenemos una colección llamada cats que contiene los siguientes 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") }

Estos documentos son ligeramente inconsistentes con respecto a los campos que tienen. Algunos tienen un weight campo, otros tienen una height campo, algunos tienen un born campo, etc

Podemos usar el $exists operador para devolver documentos de esa colección que tienen un campo específico.

Ejemplo:

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 }

Vemos que solo aquellos documentos que contienen un weight se devuelven.

Campos que contienen null

El $exists el operador incluye campos que contienen null . No discrimina entre null y no null valores.

Ejemplo:

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 se devolvió el documento 5, aunque su name el campo es null .

Existe sin un valor específico

Puedes combinar $exists con otros operadores para devolver documentos que contienen el campo, pero ese campo no contiene un valor específico.

Ejemplo:

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

Resultado:

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

Este es un resultado diferente al que habríamos visto si simplemente hubiéramos usado $nin sin el $exists operador.

Así es como se vería:

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 no contienen un campo específico

Puedes usar $exists: false para devolver documentos que no contener el campo especificado.

Ejemplo:

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

Resultado:

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

En este caso, un documento de la colección no contiene el name campo.

Comprobar varios campos

Puede comprobar la existencia de varios campos separándolos con una coma.

Ejemplo:

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

Resultado:

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

Este ejemplo devuelve todos los documentos que contienen un name campo y una height campo.