Consulta con múltiples condiciones en MongoDB

Tahseen Tauseef 20 junio 2023
  1. Operador $or en MongoDB
  2. Encuentre múltiples condiciones usando el operador $or
  3. Operador $y en MongoDB
  4. Encuentre múltiples condiciones usando el operador $and
Consulta con múltiples condiciones en MongoDB

Este artículo le enseñará cómo consultar con múltiples condiciones usando múltiples documentos en MongoDB. Los operadores $and y $or se explican brevemente con ejemplos de cada uno.

MongoDB proporciona al usuario diferentes operadores lógicos de consulta, los operadores $o y $y son uno. Pero primero, echemos un vistazo a la tabla de contenido de este artículo.

  1. Operador $o
  2. Encuentra múltiples condiciones usando el operador $or
  3. Operador $y
  4. Encuentra múltiples condiciones usando el operador $and

Operador $or en MongoDB

De acuerdo con los requisitos, puede usar este operador en métodos como buscar(), actualizar(), etc.

  1. También puede utilizar este operador con consultas de texto, consultas Geoespaciales y operaciones de clasificación.
  2. Cuando MongoDB evalúa las cláusulas en la expresión $or, realiza un escaneo de colección. O bien, si los índices admiten todas las cláusulas de la expresión $or, entonces MongoDB realiza exploraciones de índice.
  3. También puede anidar la operación $or.

Al ejecutar una operación lógica OR en una matriz de dos o más expresiones, el operador OR selecciona documentos que satisfacen al menos una de las expresiones. El operador $or tiene la siguiente sintaxis.

{ $or: [ { <expression1> }, { <expression2> }, ... , { <expressionN> } ] }

Considere el siguiente ejemplo.

db.inventory.find( { $or: [ { quantity: { $lt: 51 } }, { price: 20 } ] } )

En esta consulta, se devolverán todos los documentos de la colección de inventario con un valor de campo cantidad inferior a 51 o el valor de campo precio inferior a 20.

Analicemos primero el comportamiento del operador o en MongoDB.

Cláusulas e índices para el operador $or

Al evaluar todas las cláusulas en la expresión $or, MongoDB realiza un escaneo de colección o un escaneo de índice. MongoDB ejecuta exploraciones de índice si los índices admiten todas las cláusulas.

Como resultado, para que MongoDB analice la declaración, todas las cláusulas en la expresión $or deben estar respaldadas por índices. Si este no es el caso, MongoDB realizará un análisis de la colección.

Cada cláusula de la consulta $or puede utilizar su índice cuando se emplean índices con consultas $or. Mira el siguiente ejemplo a continuación.

db.inventory.find( { $or: [ { quantity: { $lt: 51 } }, { price: 20 } ] } )

En lugar de un índice compuesto, establecería un índice para la cantidad y otro para el precio para manejar esta consulta.

db.inventory.createIndex( { quantity: 1 } )
db.inventory.createIndex( { price: 1 } )

Para habilitar las cláusulas $or, MongoDB puede usar cualquier índice excepto el índice geoHaystack.

Consultas text y el operador $or

Si $o incluye una consulta $texto, un índice debe admitir todas las cláusulas de la matriz $o. Como resultado, una consulta $texto debe usar un índice, y una consulta $o solo puede usar los índices si se admiten todas sus cláusulas.

Si la consulta $texto no utiliza un índice, la consulta devolverá un error.

Consultas GeoSpatial y el operador $or

$or permite cláusulas geográficas, excepto la cláusula near (que incluye $nearSphere y $near). No puede haber una cláusula relativa en $or con otra cláusula.

Operaciones de clasificación y el operador $or

Al realizar consultas $or con sort(), MongoDB ahora puede utilizar índices que admitan las cláusulas $or. En versiones anteriores de MongoDB, los índices no se usaban.

$o VS $en

Utilice el operador $in en lugar del operador $or con expresiones que son pruebas de igualdad para el valor del mismo campo.

Utilice el operador $in, por ejemplo, para elegir todos los documentos de la colección inventario donde el valor del campo cantidad sea 40 o 1000.

db.inventory.find ( { quantity: { $in: [40, 1000] } } )

Encuentre múltiples condiciones usando el operador $or

El operador o en MongoDB se usa para seleccionar o recuperar solo documentos que coincidan con al menos una de las frases proporcionadas.

  1. También puede usar este operador en un método como buscar(), actualizar(), etc., según los requisitos.
  2. También puede usar este operador con consultas de texto y operaciones de clasificación.
  3. También puede anidar la operación $or.

Vamos a por un ejemplo para entender el funcionamiento del operador $or.

Ejemplo:

Vamos a crear una colección que contenga los siguientes documentos.

db={
  "students": [
    {
      id: 1,
      name: "Ali",
      Age: 24,
      language: "JavaScript",
      status: "inactive",
      score: 82
    },
    {
      id: 2,
      name: "Haris",
      Age: 35,
      language: "Python",
      status: "inactive",
      score: 87
    },
    {
      id: 3,
      team: "Hamza",
      Age: 27,
      status: "active",
      language: "Python",
      score: 84
    }
  ]
}

Muestra todos los documentos de una colección utilizando el método find().

db.students.find();

La siguiente es la consulta de MongoDB con el operador $or.

db.students.find({
  $or: [
    {
      Age: {
        $lte: 24
      }
    },
    {
      score: {
        $lt: 80
      }
    },
    {
      status: "Inactive"
    }
  ]
})

Esto producirá la siguiente salida.

uso u operador

Operador $y en MongoDB

$and realiza una operación lógica AND en una matriz de una o más expresiones (expression1>, expression2>, etc.) y selecciona los documentos que satisfacen todas las expresiones.

Comportamiento:

$and maneja los errores de la siguiente manera para ayudar al motor de consultas a mejorar las consultas.

  1. Si cualquier expresión proporcionada a $and daría lugar a un error si se evaluara sola, el $and que contiene la expresión puede dar lugar a un error, aunque esto no está garantizado.
  2. Una expresión proporcionada después de la primera expresión proporcionada a $y puede causar un error incluso si la primera expresión se evalúa como falsa.

Sintaxis:

La sintaxis utilizada cuando se utiliza el operador y es la siguiente.

{ $and: [{ <expression1> },{ <expression2> }, ... ,{ <expressionN> }] }

Por ejemplo, la siguiente consulta siempre producirá un error si $x es 0.

db.example.find( {
   $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] }
} )

La siguiente consulta, que contiene múltiples expresiones proporcionadas a $and, puede generar un error si hay algún documento donde $x es 0.

db.example.find( {
   $and: [
      { x: { $ne: 0 } },
      { $expr: { $eq: [ { $divide: [ 1, "$x" ] }, 3 ] } }
   ]
} )

Encuentre múltiples condiciones usando el operador $and

Puede utilizar el operador $and en MongoDB para aplicar varios criterios. Primero, elegiremos todos los artículos que cumplan con todas las frases de condición utilizando la operación $and.

  1. Puede usar este operador en métodos como buscar(), actualizar(), etc., según el requisito.
  2. También puede usar este operador con consultas de texto y operaciones de clasificación.

Entonces, entendámoslo con la ayuda de un ejemplo.

Los siguientes registros se insertan en la colección estudiantes.

db={
  "students": [
    {
      id: 1,
      name: "Ali",
      Age: 24,
      language: "JavaScript",
      status: "inactive",
      score: 82
    },
    {
      id: 2,
      name: "Haris",
      Age: 35,
      language: "Python",
      status: "inactive",
      score: 87
    },
    {
      id: 3,
      team: "Hamza",
      Age: 27,
      status: "active",
      language: "Python",
      score: 84
    }
  ]
}

Ahora, aplica múltiples condiciones usando el operador $and y encuentra los documentos.

db.students.find({
  $and: [
    {
      "language": "Python"
    },
    {
      "Age": 35
    }
  ]
})

Aquí se aplica la operación $and para encontrar aquellos documentos donde idioma es Python, y Edad es 35.

Vea el funcionamiento del código anterior en MongoDB en esta captura de pantalla.

uso y operador

Obtuvo el resultado con éxito según la condición dada. Luego, puede usar el operador $and y recuperar los documentos según la condición.

En este artículo, se explica en detalle la consulta con múltiples condiciones usando múltiples documentos en MongoDB usando el operador $and y $or.

Artículo relacionado - MongoDB Query