【问题标题】:How to match mongo document against an array of rules one by one如何将mongo文档与一组规则一一匹配
【发布时间】:2014-01-03 06:38:24
【问题描述】:

我进行查找并取回一个文档。我也有一套 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'] };

【问题讨论】:

标签: javascript mongodb rule-engine


【解决方案1】:

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

我需要做的就是在 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);
    }
}

【讨论】:

猜你喜欢
  • 2015-07-28
  • 1970-01-01
  • 2018-03-09
  • 1970-01-01
  • 1970-01-01
  • 2021-11-02
  • 2019-11-07
  • 1970-01-01
相关资源
最近更新 更多