Du måste bygga MongoDB:s $expr som liknar frågan som du får från Angular query Builder-modulen . Eftersom regeluppsättningarna kan kapslas måste du köra din mappningsfunktion rekursivt. Nedanstående kod täcker förmodligen inte alla möjliga fall men bör ge dig en bra introduktion för att komma igång med sådan kartläggning.
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);
Resultatuttryck kan skickas antingen till MongoDB:s find
metod
db.col.find(mongoDbQuery);
eller till $match pipeline stage:
db.col.aggregate([{ $match: mongoDbQuery }]);