2013-01-14 17 views
10

Muszę napisać proste zapytanie przy użyciu java, ale nie jestem w stanie tego zrobić.Jak wykonać to zapytanie MongoDB przy użyciu java?

Mongo kwerenda wygląda następująco:

db.yourCollection.find({"$where" : "this.startDate < this.endDate"}) 

muszę napisać powyższe zapytanie za pomocą klasy QueryBuilder. Ale nie mogę tego zrobić w sterowniku MongoDBjava.

BasicDBObject document = new BasicDBObject(); 
document.put("id", 1001); 
document.put("intValue", 1200); 
document.put("updateValue", 2100); 

DBObject query = QueryBuilder.start("intValue").lessThan("updateValue").get(); 
DBCursor cursor = collection.find(query); 
while (cursor.hasNext()) { 
System.out.println("Result : -"+cursor.next());} 

Powyższy kod nie zwraca żadnych wyników. Ale jeśli zmieniono na updateValue na, to daje wynik. Moje pytanie tutaj to lessThan pobiera obiekt jako parametr wejściowy. Jak mogę przekazać pole dokumentu jako parametr wejściowy?

Odpowiedz

11

Idealnie zapytanie MongoDB powinno być tak: -

db.yourCollection.find({"startDate": {$lt: endDate}}) 

które mogą być napisane w języku Java tak: -

BasicDBObject query = new BasicDBObject("startDate", new BasicDBObject("$lt", endDate); 
DBCursor cursor = coll.find(query); 

Można przyjrzeć Official Tutorial


Jeśli chcesz użyć QueryBuilder, możesz to zrobić tak: -

DBObject query = QueryBuilder.start("startDate").lessThan("endDate").get(); 
DBCursor cursor = coll.find(query); 
+0

Powyższy kreator zapytań nie działa. jeśli "endDate" jest polem w tym samym dokumencie. Działa, jeśli podam stałą wartość zamiast endDate w QueryBuilder. Ponadto BasicDBObject nie akceptuje nazwy pola endDate w tym drugim parametrze – zulu

4

QueryBuilder pomaga konstruować złożone zapytania w celu pobrania danych z kolekcji w mongo db. Możesz użyć QueryBuilder w ten sposób.

BasicDBObject document = new BasicDBObject(); 
QueryBuilder qb = new QueryBuilder(); 
qb.or(new QueryBuilder().put("starting_date").is(null).put("ending_date").is(null).get(), 
       new QueryBuilder().put("starting_date").lessThanEquals("ending_date").get()); 
document.putAll(qb.get()); 
DBCursor cursor = getDbCollection().find(document) 
  • QueryBuilder QB = nowy QueryBuilder() tworzy nową instancję QueryBuilder.
  • Logika zbudowana przez QueryBuilder w powyższym przykładzie to; (data początkowa = null i data zakończenia = null) lub (data początkowa < = data zakończenia)
  • document.putAll (qb.get()) dodaje logikę skonstruowaną do DBObject.
Powiązane problemy