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