2012-01-01 39 views
5

Tôi gặp sự cố với truy vấn MongoDB này bằng cú pháp mảng PHP. Đây là phiên bản trực tiếp của truy vấn tôi muốn sử dụng.

db.collection.find({ 
     $or: [ 
      {$and : [{X:1}, {X: {$gt: 100}}]}, 
      {$and : [{X:2}, {X: {$lt: 100}}]} 
     ] 
}); 

Lưu ý: Truy vấn thực tế phức tạp hơn, đây chỉ là một ví dụ.

Tôi không thể tìm thấy một số ví dụ mô tả loại truy vấn này bằng PHP. Điều tốt nhất tôi đã đưa ra là:

$query = array(
    '$or' => array(
     array(
      '$and' => array(
       array('X' => 1), 
       array('X' => array('gt' => 100)) 
      ) 
     ), 
     array(
      '$and' => array(
       array('X' => 2), 
       array('X' => array('lt' => 100)) 
      ) 
     ), 
    ) 
); 

$this->db->collection->find($query); 

Nhưng truy vấn này không trả lại bất kỳ kết quả nào. Rõ ràng chúng tôi không thể xóa $and khỏi mảng vì chúng tôi không thể có các khóa trùng lặp trong mảng PHP.

Tôi không muốn sử dụng các biểu thức JavaScript vì tốc độ rất quan trọng.

CẬP NHẬT: Như Alexander Azarov đã chỉ ra trong nhận xét, truy vấn ban đầu của tôi có thể được viết khác nhau. Tôi đã cập nhật câu hỏi bằng truy vấn $and được sử dụng đúng cách.

+0

Chính xác thì không hiệu quả? Bạn có thông báo lỗi không? –

+0

Truy vấn thực hiện tốt nhưng trả về 0 kết quả. –

+0

Bạn có thể đăng kết xuất dữ liệu mẫu không? –

Trả lời

10

Dưới đây là ví dụ về mã với các toán tử hoặc trong PHP cho truy vấn Mongo.

Nó sử dụng tên trường khác nhau từ những gì bạn sẽ tìm thấy trong truy vấn của mình, nhưng thật đơn giản để hiểu cách sử dụng nó.

Ngay bây giờ tôi không có thời gian để thay đổi nó, để phù hợp với truy vấn của bạn, nhưng nếu bạn có vấn đề với điều đó, hãy cho tôi biết và tôi sẽ điều chỉnh nó. Truy vấn này đang hoạt động và tìm thấy những gì cần tìm.

$arrFind = array(
    '$or' => array(
     array(
      '$and' => array(
       array(
        UI_name => array(
         '$regex' => 'andrew', 
         '$options' => 'i' 
        ) 
       ), 
       array(
        UI_surname => array(
         '$regex' => 'mik', 
         '$options' => 'i' 
        ) 
       ) 
      ) 
     ), 
     array(
      '$and' => array(
       array(
        UI_surname => array(
         '$regex' => 'andrew', 
         '$options' => 'i' 
        ) 
       ), 
       array(
        UI_name => array(
         '$regex' => 'mik', 
         '$options' => 'i' 
        ) 
       ) 
      ) 
     ), 
    ) 
);