У меня есть следующий скрипт поиска: -
{
"$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
.Я хотел бы написать выше сценарий