sql >> Databasteknik >  >> NoSQL >> MongoDB

Konvertera JSON-frågevillkor till MongoDB/Mongoose-operationer

Du måste bygga MongoDB:s $expr som liknar frågan som du får från Angular query Builder-modulen . Eftersom regeluppsättningarna kan kapslas måste du köra din mappningsfunktion rekursivt. Nedanstående kod täcker förmodligen inte alla möjliga fall men bör ge dig en bra introduktion för att komma igång med sådan kartläggning.

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

Resultatuttryck kan skickas antingen till MongoDB:s find metod

db.col.find(mongoDbQuery);

eller till $match pipeline stage:

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



  1. MongoDB Java Inserting Throws org.bson.codecs.configuration.CodecConfigurationException:Kan inte hitta en codec för klassen io.github.ilkgunel.mongodb.Pojo

  2. Spring Data MongoDB hur man tilldelar utgångstid programmatiskt

  3. Skrivskyddat filsystem när du försöker mkdir /data/db på Mac

  4. Hur konfigurerar jag mongodb för att ta bort gamla loggfiler?