如何使用Java在MongoDB中使用AND和OR子句执行查询

时间:2016-04-20 19:22:24

标签: java mongodb mongodb-query mongo-java-driver

我想在MongoDB 3.2中使用Java Driver 3.2执行查询,它同时包含$and$or子句。

使用reference,我尝试了以下方法:

List<Document> criteria1 = new ArrayList<>();
List<Document> criteria2 = new ArrayList<>();

criteria1.add(new Document("fetchStatus", new Document("$gte", FetchStatus.PROCESSED_NLP.getID())));
criteria1.add(new Document("fetchStatus", new Document("$lte", fetchStatusParam)));
criteria1.add(new Document("episodeID", new Document("$in", episodeIDs)));

criteria2.add(new Document("fetchStatus", new Document("$eq", PROCESSED_FETCH.getID())));
criteria2.add(new Document("isFullTextRet", new Document("$eq", false)));

BasicDBList or = new BasicDBList();
or.add(criteria1);
or.add(criteria2);

DBObject query = new BasicDBObject("$or", or);
ArrayList<Document> results = dbC_Coll.find(query).into(new ArrayList<>());

criteria1条款中,criteria2$or应与criteria1相关联,$and应该应用。{/ p>

问题是在MongoDB Java Driver 3.2中没有这样的方法,我得到Cannot resolve method find(com.mongodb.DBObject)错误。

我的问题:
如何在MongoDB Java Driver 3.2中编写(A && B) || (X && Y)等查询?

1 个答案:

答案 0 :(得分:4)

就我个人而言,我发现构建对象序列就像使用JSON结构来增强可读性一样容易混淆。但只要Document() {} List,只要看到[] Document query = new Document( "$or", Arrays.asList( // First document in $or new Document( "fetchStatus", new Document( "$gte", FetchStatus.PROCESSED_NLP.getID() ) .append("$lte", fetchStatusParam) ) .append("episodeID", new Document( "$in", episodeIDs)), // Second document in $or new Document("fetchStatus", PROCESSED_FETCH.getID()) .append("isFullTextRet", false) ) ); { "$or": [ { "fetchStatus": { "$gte": FetchStatus.PROCESS_NLP.getID(), "$lte": fetchStatusParam }, "episodeID": { "$in": episodeIDs } }, { "fetchStatus": PROCESSED_FETCH.getID(), "isFullTextRet": false } ] } ,就可以$eq

CROSS APPLY

基本上与:

相同
.value()

此外,不需要&#34;明确&#34; .nodes()运营商,因为&#34;等于&#34;实际上是查询属性中值赋值的默认含义。