2013-01-14 36 views
10

Tôi phải viết một truy vấn đơn giản MongoDB bằng cách sử dụng java nhưng không thể làm điều đó.Cách thực hiện truy vấn MongoDB này bằng java?

truy vấn

Các Mongo trông như thế này:

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

tôi phải viết các truy vấn trên bằng cách sử dụng lớp QueryBuilder. Nhưng tôi không thể làm điều đó trong trình điều khiển 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());} 

Mã trên không trả lại bất kỳ kết quả nào. Nhưng nếu thay đổi thành updateValue thành 2100, nó sẽ cho kết quả. Câu hỏi của tôi ở đây là lessThan lấy đối tượng làm tham số đầu vào. Sau đó làm thế nào tôi có thể vượt qua trường tài liệu như một tham số đầu vào?

Trả lời

11

Lý tưởng nhất là truy vấn MongoDB của bạn nên được như thế này: -

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

có thể được viết bằng Java như thế này: -

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

Bạn có thể có một cái nhìn tại Official Tutorial


Nếu bạn muốn sử dụng QueryBuilder, bạn có thể làm như sau: -

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

Trình tạo truy vấn ở trên không hoạt động. nếu "endDate" là một trường trong cùng một tài liệu. Nó làm việc nếu tôi đưa ra giá trị không đổi thay vì endDate trong QueryBuilder. Hơn nữa BasicDBObject không chấp nhận tên trường endDate trong tham số thứ hai thứ hai – zulu

4

QueryBuilder giúp xây dựng các truy vấn phức tạp để truy xuất dữ liệu từ bộ sưu tập trong mongo db. Bạn có thể sử dụng QueryBuilder như thế này.

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 = new QueryBuilder(), khởi tạo một QueryBuilder mới.
  • Việc xây dựng logic của QueryBuilder trong ví dụ trên là; (ngày bắt đầu = null và ngày kết thúc = null) hoặc (ngày bắt đầu < = ngày kết thúc)
  • document.putAll (qb.get()) thêm logic được tạo cho DBObject.
Các vấn đề liên quan