Bạn cần tạo $ expr của MongoDB tương tự như truy vấn bạn nhận được từ mô-đun trình tạo truy vấn góc . Vì các ruleSets có thể được lồng vào nhau nên bạn cần chạy hàm ánh xạ của mình một cách đệ quy. Đoạn mã dưới đây có thể không bao gồm mọi trường hợp có thể xảy ra nhưng sẽ cung cấp cho bạn một phần giới thiệu tốt để bắt đầu với việc lập bản đồ như vậy.
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);
Biểu thức kết quả có thể được chuyển tới find
của MongoDB phương pháp
db.col.find(mongoDbQuery);
hoặc vào $ match giai đoạn đường ống:
db.col.aggregate([{ $match: mongoDbQuery }]);