Anda perlu membuat $expr MongoDB yang mirip dengan kueri yang Anda dapatkan dari Modul pembuat kueri sudut . Karena ruleSets dapat disarangkan, Anda perlu menjalankan fungsi pemetaan secara rekursif. Kode di bawah ini mungkin tidak mencakup setiap kasus yang mungkin, tetapi seharusnya memberi Anda pengantar yang baik untuk memulai pemetaan tersebut.
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);
Ekspresi hasil dapat diteruskan ke find
Mon MongoDB metode
db.col.find(mongoDbQuery);
atau ke $match tahap saluran:
db.col.aggregate([{ $match: mongoDbQuery }]);