sql >> Databáze >  >> NoSQL >> MongoDB

Převeďte podmínky dotazu JSON na operace MongoDB/Mongoose

Musíte vytvořit $expr MongoDB což je podobné dotazu, který dostáváte z modulu Angular query builder . Protože sady pravidel mohou být vnořené, musíte svou mapovací funkci spouštět rekurzivně. Níže uvedený kód pravděpodobně nepokrývá všechny možné případy, ale měl by vám poskytnout dobrý úvod, abyste mohli začít s takovým mapováním.

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

Výsledný výraz lze předat buď do find MongoDB metoda

db.col.find(mongoDbQuery);

nebo do $match fáze potrubí:

db.col.aggregate([{ $match: mongoDbQuery }]);



  1. Dotazování MongoDB, aby odpovídalo v první položce v poli

  2. Jak implementovat oAuth2 spolu s ověřováním JWT v jarním bootování?

  3. Jaký je správný způsob, jak zacházet s mongoose spojeními s express.js?

  4. Transakce Redis