MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Konvertieren Sie JSON-Abfragebedingungen in MongoDB/Mongoose-Operationen

Sie müssen $expr von MongoDB erstellen Dies ähnelt der Abfrage, die Sie vom Angular Query Builder-Modul erhalten . Da die Regelsätze verschachtelt werden können, müssen Sie Ihre Zuordnungsfunktion rekursiv ausführen. Der folgende Code deckt wahrscheinlich nicht jeden möglichen Fall ab, sollte Ihnen aber eine gute Einführung geben, um mit einem solchen Mapping zu beginnen.

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);

Der Ergebnisausdruck kann entweder an find von MongoDB übergeben werden Methode

db.col.find(mongoDbQuery);

oder in $match Pipeline-Phase:

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