Как сопоставить документ 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 ответ:
Я думаю, что нашел ответ в 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); } }