Как сопоставить документ mongo с массивом правил по одному


Я делаю поиск и получаю один документ обратно. У меня также есть набор правил монго. Мне нужно сопоставить документ с этим набором правил, и если документ соответствует правилу, добавьте имя правила к вложенному документу с именем правила.

Предположим, что документ таков -

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

У меня это хранится в переменной JavaScript. У меня также есть набор правил, преобразованных в MongoDB rules -

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

Я хочу перебрать правила, сопоставить объект randomGuy с каждым и добавить имена правил для свойства rulenames randomGuy. Таким образом, конечный объект randomGuy выглядит следующим образом -

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

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);
    }
}