2012-05-04 14 views
12

Ich muss eine komplexe Mongo-Abfrage mit Java schreiben, aber ich bin nicht in der Lage, es zu tun.Mongo DB Abfrage in Java

Die Mongo Abfrage sieht wie folgt aus:

db.video.findOne({ 
    $or: [ 
     { key1: { $in : [764] } }, 
     { key2: {$in : [list2] } }, 
     { $and [ { key2 : 3}, {key4:67} ] } 
    ] 
}) 

ich die obige Abfrage mit der Querybuilder-Klasse zu schreiben. Wie kann ich das machen?

Dank

Antwort

17

Mit Querybuilder Ihre Abfrage wie diese

DBObject query = QueryBuilder.start().or(
    QueryBuilder.start("key1").in(764).get(), 
    QueryBuilder.start("key2").in(keys).get(), 
    QueryBuilder.start().and("key3").is(3).and("key4").is(64).get() 
).get(); 

Erwägen Sie jongo (eine API über Mongo-java-Treiber)

können Sie einfach aus der Schale Kopieren/Einfügen von Abfragen aussehen sollte:

collection.findOne("{$or:[{key1: {$in:[764]}},{key2:{$in:[#]}}, {$and:[{key3:3},{key4:67}]}]}", keys).as(People.class); 
+0

Aber wie Abfrage (DBObject) ausführen? – Qasim

6

hatte ich das gleiche Problem, und ich habe eine Lösung in einer anderen Art und Weise:

ArrayList orList = new ArrayList(); 
ArrayList andList = new ArrayList(); 

orList.add(new BasicDBObject("key1", new BasicDBObject("$in", 764)));     
orList.add(new BasicDBObject("key2", new BasicDBObject("$in", list2))); 

andList.add(new BasicDBObject("key2", 3)); 
andList.add(new BasicDBObject("key4", 67)); 

orList.add(new BasicDBObject("$and", andList)); 

BasicDBObject query = new BasicDBObject("$or", orList); 
+0

Aber wie Abfrage ausführen (DBObject)? – Qasim