将 MongoDB3.0 查询转换为 java
Conversion of MongoDB3.0 query to java
我正在研究 java 和 MongoDb 3.0,并且有一个查询要转换成 java 代码。
Mongo 数据库查询如下:
db.users.find({ $or: [ { updated_at:{ $gt:90, $lte:200}}, { updated_at:{ $gt:350, $lte:400}}, { updated_at:{ $gt:560, $lte:700}} ] })
Java 查询如下所示。
List<Document> orqueryList = new ArrayList<Document>();
List<String> list1 = new ArrayList<String>();
list1.add("90:200");
list1.add("350:400");
list1.add("560:700");
Document greaterQuery = new Document();
Document lessQuery = new Document();
Document lEQuery = new Document();
Document gEQuery = new Document();
for (String time : list1) {
String[] updatedAtt = tim.split(":");
gEQuery.put("$gte", Long.parseLong(updatedAtt[0]));
lEQuery.put("$lte", Long.parseLong(updatedAtt[1]));
greaterQuery.put("updated_at", gEQuery);
lessQuery.put("updated_at", lEQuery);
orqueryList.add(greaterQuery);
orqueryList.add(lessQuery);
}
query.put("$or", orqueryList);
但这不起作用,因为我的 orqueryList
列表给了我尺寸 3,最后的值如下
[Document{{received_at_server=Document{{$gte=560}}}},
Document{{received_at_server=Document{{$lte=700}}}},
Document{{received_at_server=Document{{$gte=560}}}},
Document{{received_at_server=Document{{$lte=700}}}},
Document{{received_at_server=Document{{$gte=560}}}},
Document{{received_at_server=Document{{$lte=700}}}}]
db.users.find({ $or: [ { updated_at:{ $gt:90, $lte:200}}, { updated_at:{ $gt:350, $lte:400}}, { updated_at:{ $gt:560, $lte:700}} ] })
查询分为两部分 -
1. updated_at值$gt和$lte的AND运算
2. 对上述AND运算列表进行OR运算。
greaterQuery.put("updated_at", gEQuery);
lessQuery.put("updated_at", lEQuery);
orqueryList.add(greaterQuery);
orqueryList.add(lessQuery);
}
query.put("$or", orqueryList);
您上面的 java 代码仅检查 OR 条件(列表或查询列表)。您正在将 $gt 和 $lte 条件添加到 OR 条件本身。
试试下面的逻辑:
Document query = new Document();
List<String> list1 = new ArrayList<String>();
List<Document> andQueryList = new ArrayList<Document>();
list1.add("90:200");
list1.add("350:400");
list1.add("560:700");
for (String time : list1) {
String[] updatedAtt = time.split(":");
andQueryList.add(new Document("$and", Arrays.asList(new Document("updated_at", new Document("$gte", Long.parseLong(updatedAtt[0]))),
new Document("updated_at", new Document("$lte", Long.parseLong(updatedAtt[1]))))));
}
query.put("$or", andQueryList);
查询输出如下(相当于Mongo查询)
Document{{$or=[Document{{$and=[Document{{updated_at=Document{{$gte=90}}}},
Document{{updated_at=Document{{$lte=200}}}}]}},
Document{{$and=[Document{{updated_at=Document{{$gte=350}}}},
Document{{updated_at=Document{{$lte=400}}}}]}},
Document{{$and=[Document{{updated_at=Document{{$gte=560}}}},
Document{{updated_at=Document{{$lte=700}}}}]}}]}}
我正在研究 java 和 MongoDb 3.0,并且有一个查询要转换成 java 代码。
Mongo 数据库查询如下:
db.users.find({ $or: [ { updated_at:{ $gt:90, $lte:200}}, { updated_at:{ $gt:350, $lte:400}}, { updated_at:{ $gt:560, $lte:700}} ] })
Java 查询如下所示。
List<Document> orqueryList = new ArrayList<Document>();
List<String> list1 = new ArrayList<String>();
list1.add("90:200");
list1.add("350:400");
list1.add("560:700");
Document greaterQuery = new Document();
Document lessQuery = new Document();
Document lEQuery = new Document();
Document gEQuery = new Document();
for (String time : list1) {
String[] updatedAtt = tim.split(":");
gEQuery.put("$gte", Long.parseLong(updatedAtt[0]));
lEQuery.put("$lte", Long.parseLong(updatedAtt[1]));
greaterQuery.put("updated_at", gEQuery);
lessQuery.put("updated_at", lEQuery);
orqueryList.add(greaterQuery);
orqueryList.add(lessQuery);
}
query.put("$or", orqueryList);
但这不起作用,因为我的 orqueryList
列表给了我尺寸 3,最后的值如下
[Document{{received_at_server=Document{{$gte=560}}}}, Document{{received_at_server=Document{{$lte=700}}}}, Document{{received_at_server=Document{{$gte=560}}}}, Document{{received_at_server=Document{{$lte=700}}}}, Document{{received_at_server=Document{{$gte=560}}}}, Document{{received_at_server=Document{{$lte=700}}}}]
db.users.find({ $or: [ { updated_at:{ $gt:90, $lte:200}}, { updated_at:{ $gt:350, $lte:400}}, { updated_at:{ $gt:560, $lte:700}} ] })
查询分为两部分 - 1. updated_at值$gt和$lte的AND运算 2. 对上述AND运算列表进行OR运算。
greaterQuery.put("updated_at", gEQuery);
lessQuery.put("updated_at", lEQuery);
orqueryList.add(greaterQuery);
orqueryList.add(lessQuery);
}
query.put("$or", orqueryList);
您上面的 java 代码仅检查 OR 条件(列表或查询列表)。您正在将 $gt 和 $lte 条件添加到 OR 条件本身。
试试下面的逻辑:
Document query = new Document();
List<String> list1 = new ArrayList<String>();
List<Document> andQueryList = new ArrayList<Document>();
list1.add("90:200");
list1.add("350:400");
list1.add("560:700");
for (String time : list1) {
String[] updatedAtt = time.split(":");
andQueryList.add(new Document("$and", Arrays.asList(new Document("updated_at", new Document("$gte", Long.parseLong(updatedAtt[0]))),
new Document("updated_at", new Document("$lte", Long.parseLong(updatedAtt[1]))))));
}
query.put("$or", andQueryList);
查询输出如下(相当于Mongo查询)
Document{{$or=[Document{{$and=[Document{{updated_at=Document{{$gte=90}}}}, Document{{updated_at=Document{{$lte=200}}}}]}}, Document{{$and=[Document{{updated_at=Document{{$gte=350}}}}, Document{{updated_at=Document{{$lte=400}}}}]}}, Document{{$and=[Document{{updated_at=Document{{$gte=560}}}}, Document{{updated_at=Document{{$lte=700}}}}]}}]}}