2012-03-22 32 views
11

Trong câu trả lời cho một số question Tôi đã tìm thấy một giải pháp thú vị để tìm kiếm các giá trị mảng bằng cách sử dụng $ elemMatch.

Nếu chúng ta có các tài liệu sau trong bộ sưu tập của chúng tôi:

{ 
    foo : [ { bar : "xy", baz : 1 }, 
      { bar : "a", baz : 10 } ] 
}, 
{ 
    foo : [ { bar : "xy", baz : 5 }, 
      { bar : "b", baz : 50 } ] 
} 

Các truy vấn sau đây sẽ phù hợp với chỉ tài liệu đầu tiên:

db.test.find({ 
    foo : { "$all" : [ { "$elemMatch" : { bar : "xy", baz : 1} }, { "$elemMatch" : { bar : "a", baz : 10 } } ] } 
}); 

Tôi đã thử nó với một số ví dụ khác và nó thực sự hoạt động. Nhưng tài liệu chính thức cho nhà điều hành $all không nói gì về việc kết hợp hai truy vấn này.

Đây có phải là hành vi dự định hoặc lỗi không? Hay đây chỉ là vấn đề mà tài liệu không đề cập đến trường hợp sử dụng này?

Trả lời

5

Đây là hành vi dự định. Tài liệu này không đề cập đến trường hợp sử dụng này và chúng tôi đang làm việc để làm cho nó trở nên tốt hơn. Tuy nhiên, khó có thể ghi lại mọi kết hợp truy vấn có thể có.

+2

Cảm ơn thông tin. Tôi hiểu rằng thật khó để ghi lại mọi kết hợp nhưng sẽ rất hữu ích khi biết rằng một số toán tử có thể được kết hợp. –

+0

Có cách nào để thực hiện việc này chưa? –

Các vấn đề liên quan