Consulta MongoDB con una condición OR

Tahseen Tauseef 20 junio 2023
  1. el operador $or en MongoDB
  2. Cláusulas e índices para el operador $or
  3. Consultas individuales y el operador $or
  4. el operador $or VS el operador $in
  5. Manejo de errores con el operador $or
Consulta MongoDB con una condición OR

Este artículo del tutorial le enseñará cómo usar el operador $or con una consulta MongoDB.

MongoDB proporciona al usuario diferentes tipos de operadores lógicos de consulta, y el operador $or es uno de ellos. Este operador realiza operaciones lógicas OR en la matriz de dos o más expresiones y selecciona o recupera solo aquellos documentos que coinciden con al menos una de las expresiones dadas en la matriz.

el operador $or en MongoDB

Puede utilizar el operador $o 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. Si los índices admiten todas las cláusulas en la expresión $or, entonces MongoDB realiza exploraciones de índice.
  3. También puede anidar la operación $or.

El operador $or elige documentos que cumplen al menos una de las expresiones realizando una operación lógica OR en una matriz que consta de dos o más expresiones.

Sintaxis:

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

Consulta:

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

Todos los documentos serán devueltos en esta consulta en la colección de inventario con un valor de campo cantidad inferior a 50 o un valor de campo precio inferior a 20.

Cláusulas e índices para el operador $or

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

Por lo tanto, todas las cláusulas en la expresión $or deben estar respaldadas por índices para que MongoDB las use para evaluar la declaración. MongoDB ejecutará un escaneo de colección si este no es el caso.

Cada cláusula de una consulta $o puede utilizar su índice cuando se emplean índices con consultas $o.

Consulta:

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

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

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 individuales y el operador $or

  1. Las consultas $texto y el operador $o.

    Un índice debe admitir todas las cláusulas de la matriz $o si $o incluye una consulta $texto. Una consulta $texto debe utilizar un índice, y $o solo puede utilizar índices si todas sus cláusulas son compatibles con los índices.

    Si la consulta $texto no puede usar un índice, la consulta producirá un error.

  2. Consultas GeoSpatial y el operador $or.

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

  3. Operaciones de ordenación y el operador $or.

    MongoDB ahora puede usar índices que admiten las cláusulas $or cuando se ejecutan consultas ‘$or’ con un ‘sort()’. Los índices no se usaban en versiones anteriores de MongoDB.

el operador $or VS el operador $in

En lugar de utilizar el operador $o con expresiones que son comprobaciones de igualdad para el valor del mismo campo, utilice el operador $en. Utilice el operador $in para elegir todos los documentos de la colección 'inventario' donde el valor del campo cantidad sea 40 o 1000.

Consulta:

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

Además, puede anidar el operador $or.

Manejo de errores con el operador $or

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

  1. Si se proporciona alguna expresión al operador $o, provoca un error cuando se evalúa por separado. El operador $o que contiene la expresión puede causar un error, pero esto no está garantizado.
  2. Incluso si la primera expresión proporcionada a $o se evalúa como true, una expresión enviada después puede generar un error.

Si $x es 0,, por ejemplo, la siguiente consulta siempre devolverá un error.

Consulta:

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

Supongamos que hay un documento donde $x tiene el valor 0, lo que implica múltiples expresiones pasadas a $o. El siguiente ejemplo podría producir un error.

Consulta:

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

Este tutorial de MongoDB le enseña cómo usar el operador $or con una consulta de MongoDB para realizar operaciones lógicas OR en la matriz, que consta de dos o más expresiones, y también seleccionar o recuperar solo los documentos que coinciden con al menos una de las expresiones dadas en la matriz.

Artículo relacionado - MongoDB Operator