Трябва да изградите $expr на MongoDB което е подобно на заявката, която получавате от модула за създаване на заявки Angular . Тъй като наборите от правила могат да бъдат вложени, трябва да стартирате функцията си за картографиране рекурсивно. Кодът по-долу вероятно не покрива всеки възможен случай, но трябва да ви даде добро въведение, за да започнете с такова картографиране.
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);
Резултатният израз може да бъде предаден или към find
на MongoDB метод
db.col.find(mongoDbQuery);
или в $match етап на тръбопровод:
db.col.aggregate([{ $match: mongoDbQuery }]);