MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Konwertuj warunki zapytania JSON na operacje MongoDB/Mongoose

Musisz zbudować $expr MongoDB które jest podobne do zapytania, które otrzymujesz z modułu tworzenia zapytań kątowych . Ponieważ zestawy reguł mogą być zagnieżdżone, musisz rekurencyjnie uruchamiać funkcję mapowania. Poniższy kod prawdopodobnie nie obejmuje wszystkich możliwych przypadków, ale powinien być dobrym wstępem do rozpoczęcia takiego mapowania.

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

Wyrażenie wynikowe może zostać przekazane do find MongoDB metoda

db.col.find(mongoDbQuery);

lub w $match etap potoku:

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



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Strefa czasowa Spring Mongodb Timestamp Wprowadzająca w błąd

  2. Sprawdzanie połączenia z MongoDB

  3. Zapisywanie tablicy numpy w mongodb

  4. Jak zrobić upsert z MongoDB 2.0?

  5. Krótki, przyjazny dla użytkownika identyfikator dla mongo