Có một lỗi đánh máy để đáp ứng @ miguel-savignano của. Theo Stackoverflow, "hàng đợi chỉnh sửa đã đầy", đó là lý do tôi không gửi chỉnh sửa.
đúng cú pháp:
Username.or({username: @username}).or({email: @email})
Một giải pháp ngắn gọn hơn:
Username.or({username: @username}, {email: @email})
Bộ chọn Mongo sẽ quyết tâm:
{"$or"=>[{"username"=>@username}, {"email"=>@email}]}
Tôi tìm thấy câu hỏi này như tôi đã cố gắng giải quyết việc tạo ra " hoặc "truy vấn.
Nếu bạn đang tìm kiếm để phù hợp với một chuỗi hoặc bất kỳ một trong một mảng các yếu tố, sau đó bạn sẽ cần phải viết một truy vấn Mongoid với bộ chọn Mongo '$ in'.
Ví dụ: bạn có tên người dùng cụ thể và một mảng email. Bạn muốn trả lại tất cả các kết quả trong đó ít nhất một trong các trường khớp với tên người dùng hoặc một trong các email trong mảng.
@username = "jess"
@emails = ["[email protected]", "[email protected]", "[email protected]"]
User.or({username: ""}, {email: {'$in': @emails}})
Bộ chọn Mongo sẽ quyết tâm:
{"$or"=>[{"first_name"=>""}, {"email"=>{:$in=>["[email protected]", "[email protected]", "[email protected]"]}}]}
- Nếu bạn có
Users
với 2 trong 3 email trong cơ sở dữ liệu của bạn, sau đó chọn sẽ trả về một tội danh 2.
- Nếu bạn có một số
User
với số username
"jess" và 3 số Users
bổ sung với một trong số các email đã cho, thì bộ chọn sẽ trả về tổng số là 4.
Trong phạm vi bạn vẫn phải sử dụng 'any_of' nếu không nó sẽ ném một lỗi cú pháp. – aledalgrande
Liên kết được đăng không nói bất cứ điều gì về '.or' cũng không' any_of', vui lòng tham khảo [tại đây] (https://github.com/mongodb/mongoid/blob/master/lib/mongoid/criteria/queryable/selectable. rb) để xem tài liệu chi tiết và thực hiện – silva96
bạn cũng có thể sử dụng self.or trong phạm vi (vì 'hoặc' là từ khóa trong ruby) – Shiyason