написать поиск mongodb с несколькими $ expr в Java - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть следующий скрипт поиска: -

{
  "$lookup": {
    "from": "table2",
    "let": {"s_id": "$s_id","s_date": "$s_date"},
    "pipeline": [{
      "$match": {
        "$expr": {"$eq": ["$$s_id","$s_id"]},
        "$expr": {"$eq": ["$$s_date","$s_date"]}
       }
      }
     ],
   "as": "table2_values"
  }
 }

$expr значение будет динамическим (на 1 поле или более 1 поля), но здесь я беру, например, 2 поля.Я пытаюсь написать выше сценарий агрегации в Java.Не могли бы вы помочь мне

List<String> whereClauseTable1List = new ArrayList<>();
whereClauseTable1List.add("s_id");
whereClauseTable1List.add("s_date");

List<String> whereClauseTable2List = new ArrayList<>();
whereClauseTable2List.add("s_id");
whereClauseTable2List.add("s_date");

 BasicDBObject letTable1Var = new BasicDBObject();
 for(String whereClauseTable1: whereClauseTable1List){
        letTable1Var.put(whereClauseTable1,"$"+whereClauseTable1);
  }

   BasicDBObject pipeLineMatchExp = new BasicDBObject();
    int index = 0;
    for(String whereClauseTable2: whereClauseTable2List){
        pipeLineMatchExp.append("$expr", new BasicDBObject("$eq", new 
        Object[]{"$$" + whereClauseTable2, "$" + 
        whereClauseTable1List.get(index)}));
        index++;
    }

  DBObject lookupDBOp = new BasicDBObject(
            "$lookup",
            new BasicDBObject("from","table2")
                    .append("let", letTable1Var)
                    .append("pipeline",new Object[]{new 
                    BasicDBObject("$match", pipeLineMatchExp)})
                    .append("as", "table2_values")
    );

На самом деле BasicObject не принимает дубликат ключа, поэтому всегда имеет условие 1 $expr.Я хотел бы написать выше сценарий

...