javascript - 如何将 mongo 文档与一系列规则一一匹配

标签 javascript mongodb rule-engine

我进行了查找并取回了一个文档。我还有一套 mongo 规则。我需要将文档与这组规则进行匹配,如果文档与规则匹配,则将规则名称附加到规则名称子文档中。

假设文档是这样的 -

var randomGuy = { name: "Random Guy", age: 45, state: "assam", profession: "coder", ruleNames: [] };

我将其存储在 JavaScript 变量中。我还有一套规则,转换为mongodb规则 -

var rules = [
       {'rule1': { name: /R*/i, age: { $gt: 40 } }},
       {'rule2': { state: "karnataka" }},
       {'rule3': { age: { $lt: 60 } }},
       {'rule4': { $or: [ { profession: 'coder' }, { profession: 'programmer' } ] }}
    ];

我想循环规则,将 randomGuy 对象与每个规则进行匹配,并将规则名称附加到 randomGuy 的ruleNames 属性中。所以最终的 randomGuy 对象看起来像这样 -

var randomGuy = { name: "Random Guy", age: 45, state: "assam", profession: "coder", ruleNames: ['rule1', 'rule3', 'rule4'] };

最佳答案

我想我在 sift.js 中找到了答案 - https://github.com/crcn/sift.js

我需要做的就是将规则作为 sift 过滤器应用于 randomGuy 对象。

var randomGuys = [randomGuy];
var ruleName, ruleString;
rules.forEach(function(rule) {
    ruleName = Object.keys(rule)[0];
    ruleString = rule[ruleName];
    if(sift(ruleString).test(randomGuy)) {
        randomGuys.ruleNames.push(ruleName);
    }
}

关于javascript - 如何将 mongo 文档与一系列规则一一匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20898046/

相关文章:

javascript - 父函数在子组件中返回未定义 - angular2

javascript - 如何在 Javascript 弹出警报中以颜色显示特定字符​​串

scala - 如何使用 ScalaTest 测试基于 Salat 的方法

javascript - 避免mongodb批量插入重复键错误

language-agnostic - 我应该使用什么规则引擎?

javascript - 从外部访问 Ember 应用程序实例 (cordova)

javascript - 通过 socket.io 单击发送事件数据时出现问题

java - java 中 mongodb 游标 (DBCursor) 的罕见行为,即使已经到达最后一个元素

java - 超能力规则语言: fire rule only after condition is fulfilled for a certain time period

c# - boolean 逻辑规则评估器