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