Helpex - Trao đổi & giúp đỡ Đăng nhập
37

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 $ortoán hạng trong các điều kiện này, nhưng tôi đoán giá trị mặc định là "và" và tôi không biết làm thế nào để thay đổi nó. Trong đoạn mã trên nếu một trong các điều kiện trả về null, kết quả cũng sẽ như nullvậy.

37 hữu ích 3 bình luận 37k xem chia sẻ
73

Bạn đúng rằng "mặc định" để chỉ định nhiều trường trong một truy vấn là mỗi trường đó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 các truy vấn MongoDB với mệnh đề OR bằng cách sử dụng $ hoặc toán hạng có cú pháp sau:

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

Trong đó mỗi mệnh đề có thể là một truy vấn. $ hoặc không nhất thiết phải là toán hạng cấp cao nhất nhưng nếu 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}]});  

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);
73 hữu ích 3 bình luận chia sẻ
11

Với các bộ lọc, bạn có thể xây dựng bộ lọc của mình như:

import com.mongodb.client.model.Filters;
...

Bson filter = Filters.or(
                    Filters.eq("post_title", regex), 
                    Filters.eq("post_description", regex)
                  );
11 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ java mongodb mongodb-query mongo-java-driver , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading