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

Operadores de muestra de MongoDB

Operadores condicionales de MongoDB especifique una condición a la que corresponderá el valor del campo del documento.

Operadores de consulta de comparación

  • $eq (igual)
  • $ne (no igual)
  • $gt (más que)
  • $lt (menor que)
  • $gte (más o igual)
  • $lte (menor o igual)
  • $en define una matriz de valores, uno de los cuales debe tener un campo de documento
  • $nin define una matriz de valores que no deberían tener un campo de documento

Por ejemplo, encontraremos todos los documentos que tengan un valor de clave de edad inferior a 30:

db.users.find ({age: {$lt : 30}})

El uso de otros operadores de comparación será similar. Por ejemplo, la misma clave, solo a partir de 30:

db.users.find ({age: {$gt : 30}})

Tenga en cuenta que la comparación aquí se realiza sobre tipos enteros, no cadenas. Si la edad de la clave representa valores de cadena, entonces la comparación debe hacerse sobre las líneas:db.users.find ({edad:{$gt:"30"}}), pero el resultado será el mismo.

Pero imaginemos una situación en la que tenemos que encontrar todos los volúmenes con un valor de campo de edad superior a 30 pero inferior a 50. En este caso, podemos combinar dos operadores:

db.users.find ({age: {$gt : 30, $lt: 50}})

Encontraremos usuarios cuya edad sea 22:

db.users.find ({age: {$eq : 22}})

En esencia, esta es la analogía de la siguiente consulta:

db.users.find ({age: 22})

Operación inversa:busque usuarios cuya edad NO sea 22:

db.users.find ({age: {$ne : 22}})

El operador $in define una matriz de posibles expresiones y busca aquellas claves cuyo valor está en la matriz:

db.users.find ({age: {$in : [22, 32]}})

En sentido contrario, el operador $nin define un arreglo de posibles expresiones y busca aquellas claves cuyo valor está ausente en este arreglo:

db.usuarios.find ({edad:{$nin:[22, 32]}})

Operadores lógicos

Los operadores lógicos se ejecutan sobre condiciones de muestreo:

  • $o :conecta dos condiciones, y el documento debe cumplir una de estas condiciones
  • $y: conecta dos condiciones, y el documento debe cumplir ambas condiciones
  • $no: el documento NO debe coincidir con la condición
  • $ni: conecta dos condiciones, y el documento NO debe cumplir ambas condiciones

Operadores de ejemplo de MongoDB

El operador $or representa una operación OR lógica y define un conjunto de pares clave-valor que deben estar presentes en un documento. Y si un documento tiene al menos un par clave-valor, corresponde a esta consulta y se extrae de la base de datos:

db.users.find ({$or : [{name: "Tom"}, {age: 22}]})

Esta expresión devolverá todos los documentos con nombre=Tom o edad=22.

Otro ejemplo devolverá todos los documentos con nombre=Tom y edad=22 o con “alemán” entre los valores de idioma:

db.users.find ({name: "Tom", $or : [{age: 22}, {languages: "german"}]})

Los operadores condicionales se pueden usar en subexpresiones o subexpresiones:

db.users.find ({$or : [{name: "Tom"}, {age: {$gte:30}}]})

En este caso seleccionamos todos los documentos donde name=”Tom” o el campo de edad tiene un valor de 30 o superior.

Operador $y

El operador $and representa una operación lógica AND (multiplicación lógica) y define un conjunto de criterios que debe cumplir un documento. A diferencia del operador $or, el documento debe cumplir todos los criterios especificados. Por ejemplo:

db.users.find ({$and : [{name: "Tom"}, {age: 32}]})

Aquí los documentos seleccionados deben tener el nombre de Tom y 32 años de edad, ambas características.

Búsqueda de matriz MongoDB

Algunos operadores están diseñados para trabajar con arreglos:

  • $todos: define un conjunto de valores que deberían existir en una matriz
  • $tamaño: define el número de elementos que deben estar en una matriz
  • $elemMatch: especifica la condición a la que deben corresponder los elementos de la matriz

MongoDB $todo

El operador $all define una matriz de posibles expresiones y requiere que los documentos tengan todo el conjunto definido de expresiones. En consecuencia, se utiliza para buscar en la matriz. Por ejemplo, los documentos tienen una matriz de idiomas que almacena los idiomas extranjeros que habla el usuario. Y para encontrar a todas las personas que hablan inglés y francés al mismo tiempo, podemos usar la siguiente expresión:

db.users.find ({languages: {$all : ["english", "french"]}})

Operador $elemMatch

El operador $elemMatch le permite seleccionar documentos en los que las matrices contienen elementos que se encuentran bajo ciertas condiciones. Por ejemplo, deje que la base de datos contenga una colección de calificaciones de usuarios para cursos específicos. Agreguemos algunos documentos:

db.grades.insertMany([{student: "Tom", courses:[{name: "Java", grade: 5}, {name: "MongoDB", grade: 4}]},
{student: "Alice", courses:[{name: "C++", grade: 3}, {name: "MongoDB", grade: 5}]}))

Cada documento tiene una matriz, que a su vez consta de documentos anidados.

Ahora encontraremos alumnos que tengan una nota superior a 3 para el curso de MongoDB:

db.grades.find({courses: {$elemMatch: {name: "MongoDB", grade: {$gt: 3}}}})

Operador $tamaño

El operador $tamaño se usa para encontrar documentos en los que las matrices tienen un número de elementos igual al valor de $tamaño. Por ejemplo, extraigamos todos los documentos donde hay dos elementos en la matriz de idiomas:

db.users.find ({languages: {$size:2}})

Tal consulta corresponderá, por ejemplo, al siguiente documento:

{"name": "Tom", "age": 32, languages: ["english", "german"]}

El operador $existe

El operador $exists permite extraer solo aquellos documentos donde una determinada clave está presente o ausente. Por ejemplo, devolver todos los documentos que contengan la clave de la empresa:

db.users.find ({company: {$exists:true}})

Si especificamos $exists como parámetro falso, la consulta nos devolverá solo aquellos documentos que no contengan la clave de la empresa.

Operador $tipo

El operador $type extrae solo aquellos documentos en los que una determinada clave tiene un valor de cierto tipo, por ejemplo, una cadena o un número:

db.users.find ({age: {$type: "string"}})
> db.users.find ({age: {$type: "number"}})

Operador $expresión regular

El operador $regex especifica una expresión regular a la que debe corresponder el valor del campo . Por ejemplo, que el nombre del campo tenga necesariamente la letra “b”:

db.users.find ({name: {$regex: "b"}})

Es importante entender que $regex no toma solo cadenas, sino expresiones regulares, por ejemplo:nombre:{$regex:“om$”} – el valor de nombre debe terminar con “om”.

Tutorial de MongoDB:operadores de consulta de matrices ($todos, $elemMatch, $tamaño)