2012-05-16 33 views
32

Tôi đang cố gắng hoặc một số điều kiện trong MongoDB (sử dụng trình điều khiển Java). Đây là những gì tôi đang làm:

Pattern regex = Pattern.compile("title"); 
DBCollection coll = MongoDBUtil.getDB().getCollection("post_details"); 

BasicDBObject query = new BasicDBObject(); 
query.put("category_title", "myCategory");  
query.append("post_title", regex); 
query.append("post_description", regex);  

DBCursor cur = coll.find(query); 
while(cur.hasNext()) { 
    System.out.println(cur.next().get("post_id")); 
} 

Tôi muốn sử dụng $or toán hạng trên những điều kiện này, nhưng tôi đoán mặc định là "và" và tôi không biết làm thế nào để thay đổi nó. Trong mã trên nếu một trong các điều kiện trả về null, kết quả sẽ là null.

+0

'mã' truy vấn.append ("$ hoặc", mới BasicDBObject(). Chắp thêm ("post_title", regex) .append ("post_description", regex)) –

+0

Điều đó không đúng. $ hoặc các mệnh đề được bao bọc bởi một mảng không phải là một đối tượng. –

+0

guys hãy trả lời câu hỏi của tôi http://stackoverflow.com/questions/38115986/writing-mongodb-syntax xin vui lòng tôi cần sự giúp đỡ của bạn> _ < – beboy

Trả lời

66

Bạn đúng rằng "mặc định" để chỉ định nhiều trường trong truy vấn là mỗi trường sẽ đóng vai trò như một bộ lọc có điều kiện và do đó là một phép toán AND.

Bạn có thể thực hiện truy vấn MongoDB với một khoản HOẶC bằng $ hoặc toán hạng trong đó có cú pháp sau:

db.col.find({$or:[clause1, clause2]}) 

đâu mỗi khoản có thể là một truy vấn. $ hoặc không phải là một toán hạng cao nhất nhưng nếu nó là MongoDB có thể sử dụng một chỉ mục cho mỗi mệnh đề riêng biệt.

Trong ví dụ của bạn, bạn muốn kết thúc với truy vấn này:

db.col.find({$or:[{"post_title", regex}, {"post_description", regex}]}); 

Mà có thể được xây dựng trong Java thông qua:

DBObject clause1 = new BasicDBObject("post_title", regex); 
DBObject clause2 = new BasicDBObject("post_description", regex);  
BasicDBList or = new BasicDBList(); 
or.add(clause1); 
or.add(clause2); 
DBObject query = new BasicDBObject("$or", or); 
+0

thnx, hãy để tôi kiểm tra nó và lấy lại 2 u. :) – MoienGK

+0

yeppppp, hoạt động, thnx – MoienGK

+0

Tôi đã thử phương pháp này trong MongoDB 3.2 với trình điều khiển Java 3.2.2 và tôi gặp lỗi: 'Không thể giải quyết phương thức dbColl.find (DBObject)'. Bạn có thể, hãy cập nhật câu trả lời cho phiên bản trình điều khiển Java thực tế. –

2

Với filters bạn có thể xây dựng của bạn thích:

Bson filter = Filters.or(
       Filters.eq("_id", mongoId), 
       Filters.eq("activo", true) 
       ); 
Các vấn đề liên quan