Tôi cần viết một truy vấn MongoDB có dạng "A OR B OR (C AND D)" để trả về một số bản ghi. Chúng tôi đang sử dụng Mongoid để truy cập dữ liệu vào các mô hình của chúng tôi.Làm thế nào để bạn viết các truy vấn "(A HOẶC B) VÀ (A HOẶC C)" với Mongoid?
Tôi mở rộng truy vấn đó thành "(A HOẶC B HOẶC C) VÀ (A HOẶC B HOẶC D)" và hy vọng sử dụng phương pháp Tiêu chí của Mongoid any_of
như sau: Model.any_of(A, B, C).any_of(A, B, D)
sẽ thực hiện những gì tôi muốn, nhưng được mở rộng "A HOẶC B HOẶC C HOẶC A HOẶC B HOẶC D" trước khi được gửi đến cơ sở dữ liệu.
Có cách nào để xây dựng truy vấn này không hay tôi phải xây dựng một truy vấn để thực hiện A OR B và một truy vấn khác để thực hiện C VÀ D và lấy liên minh của chúng?
Nhiều 'báo cáo $ or' không có ý nghĩa gì cả. Hãy suy nghĩ về những gì sẽ được khi chuyển đổi sang một đối tượng BSON. Sau này sẽ ghi đè lên trước đây. Ngoài ra, các tài liệu chọn của bạn cũng có lỗi tương tự; về cơ bản bạn đang tìm kiếm '$ hoặc: [{y: 2}]' ở đó. –
Nhiều câu lệnh '$ hoặc' có ý nghĩa hoàn hảo, chỉ là chúng dường như không được hỗ trợ bởi mongo (có liên kết để xác minh điều này, btw?). Có vẻ như cách thực hành tốt nhất là chuyển đổi thủ công các liên kết của biểu mẫu '(A OR B) AND (A OR C) 'thành các liên kết như' A OR (B AND C) 'để sử dụng' $ hoặc', vì mongoid sẽ không làm điều này cho chúng tôi. –
Nó có ý nghĩa trong ý nghĩa logic boolean, nhưng không phải trong ý nghĩa đối tượng JSON, mà không cho phép các khóa trùng lặp. Bạn đúng trong đó DNF là cách chính xác để thể hiện truy vấn. –