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

Convierta las condiciones de consulta JSON en operaciones MongoDB/Mongoose

Necesita compilar $expr de MongoDB que es similar a la consulta que obtienes del módulo generador de consultas angulares . Dado que los conjuntos de reglas se pueden anidar, debe ejecutar su función de mapeo de forma recursiva. El siguiente código probablemente no cubra todos los casos posibles, pero debería brindarle una buena introducción para comenzar con dicho mapeo.

let q = {
  "condition": "and",
  "rules": [
    {
      "field": "Brief_D_Reactiedatum",
      "operator": "!=",
      "value": "Eventtoets_Fn"
    },
    {
      "condition": "or",
      "rules": [
        {
          "field": "Alleen_AO",
          "operator": "=",
          "value": "Parkeerreden"
        }
      ]
    }
  ]
};

const conditions = { "and": "$and", "or": "$or" };
const operators = { "=": "$eq", "!=": "$ne", "<": "$lt", "<=": "$lte", ">": "$gt", ">=": "$gte" };

const mapRule = rule => ({
    [operators[rule.operator]]: [ "$"+rule.field, rule.value ]
});

const mapRuleSet = ruleSet => {
    return {
        [conditions[ruleSet.condition]]: ruleSet.rules.map(
            rule => rule.operator ? mapRule(rule) : mapRuleSet(rule)
        )
    }
};

let mongoDbQuery = { $expr: mapRuleSet(q) };
console.log(mongoDbQuery);

La expresión de resultado se puede pasar a find de MongoDB método

db.col.find(mongoDbQuery);

o en $match etapa de canalización:

db.col.aggregate([{ $match: mongoDbQuery }]);