sql >> データベース >  >> NoSQL >> MongoDB

JSONクエリ条件をMongoDB/Mongoose操作に変換します

    MongoDBの $expr をビルドする必要があります これは、Angularクエリビルダーモジュールから取得するクエリに似ています 。 ruleSetはネストできるため、マッピング関数を再帰的に実行する必要があります。以下のコードは、考えられるすべてのケースを網羅しているわけではありませんが、そのようなマッピングを開始するための良い入門書となるはずです。

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

    結果式は、MongoDBのfindに渡すことができます メソッド

    db.col.find(mongoDbQuery);
    

    または $match に パイプラインステージ:

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



    1. テキスト検索と並べ替えでインデックスが使用されるようにインデックスを作成するにはどうすればよいですか?

    2. R、Php、Mongodbによるヒートマップの生成

    3. MongoDBに表示されるネストされたドキュメントの数を制限する方法

    4. nodejsからmongodbまたはmongooseへの動的データベース接続