Tengo una operación en la que intento limitar los resultados en una colección usando el operador $or , sin embargo, tengo más de un campo que necesita utilizar esta funcionalidad.
Ver consulta a continuación:
db.items.find({//"isDeleted":false, "$or":[ {"$and":[{"passages.fleschKincaid.readingEase":{"$gte":90}}]}, {"$and":[{"passages.fleschKincaid.readingEase":{"$gte":60}},{"passages.fleschKincaid.readingEase":{"$lte":70}}]}, {"$and":[{"passages.fleschKincaid.readingEase":{"$gte":50}},{"passages.fleschKincaid.readingEase":{"$lte":60}}]} ], "$or":[{"$and": [{"contentBanks":{$in: element.statusIds}}]}]}) La primera condición recorre y agrega operadores gte/lte en función de ciertas condiciones, y la segunda o condición que he usado aquí está dentro de un bucle for que presiona un $and adicional para cada nuevo contentBank . Cada uno solo necesita cumplir una de las condiciones para mostrar como resultado, pero contentBank y passages.fleschKincaid.readingEase son mutuamente excluyentes, por lo que no se pueden agrupar en el mismo $o grupo.
es decir, si tengo un artículo, para que cumpla con mis condiciones en el ejemplo anterior, necesita un puntaje de readingEase de lectura de, digamos, 55, Y tener un banco de statusIds contentBank Debe cumplir con ambas condiciones, pero verifique los $or por separado.
Lo que termino es una consulta que sobrescribe las condiciones escritas y las trata como un gran $or , devolviendo resultados que pueden coincidir con un contentBank pero no estar dentro del rango de readingEase .
Cualquier ayuda sería muy apreciada. Estoy escribiendo esto con javascript, mongoose y mongodb. Si conoce una forma de obtener la consulta para tratarlos por separado, sería genial.
pd: estoy tratando de evitar que se llene de $and operadores, pero si esa es la única forma de hacerlo, puedo encontrar una manera de crear un objeto completamente nuevo y agregarlo. El único problema con eso es que la complejidad aumenta un poco porque todos los operadores de canalización se construyen dinámicamente, por lo que el $and el operador que envuelve todo requeriría una gran cantidad de cambios/sobrecarga para que funcione.