Đối sánh khung tổng hợp MongoDB HOẶC


96

Có thể thực hiện HOẶC trong trận đấu $ không?

Ý tôi là một cái gì đó như thế này:

db.articles.aggregate(
    { $or: [ $match : { author : "dave" }, $match : { author : "john" }] }
);

Câu trả lời:


168
$match: { $or: [{ author: 'dave' }, { author: 'john' }] }

Giống như vậy, vì $matchtoán tử chỉ lấy những gì bạn thường đưa vào find()hàm


84

Trong trường hợp cụ thể này, khi bạn đang $or-ing cùng một trường , $intoán tử sẽ là lựa chọn tốt hơn, cũng vì nó làm tăng khả năng đọc:

$match: { 
  'author': { 
    $in: ['dave','john'] 
  } 
}

Theo tài liệu MongoDB, việc sử dụng $inđược khuyến khích trong trường hợp này:

$ hoặc so với $ in

Khi sử dụng $ hoặc với <expressions> kiểm tra bình đẳng cho giá trị của cùng một trường, hãy sử dụng toán tử $ in thay vì toán tử $ hoặc.

https://docs.mongodb.com/manual/reference/operator/query/or/#or-versus-in


1
Theo tài liệu Mongo, cách làm này "hiệu quả nhất" để so sánh bình đẳng chẳng hạn như ví dụ của bạn. Xem docs.mongodb.org/manual/reference/operator/query/or/#_S_or%22
Mark Gibaud

3
$
In

1
Tôi tin rằng $ hoặc không phải là một toán tử tổng hợp.
Paul Shapiro

@PaulShapiro: Tôi hy vọng bạn đã không bỏ phiếu vì điều này. Đối với tất cả, vui lòng xem xét bình luận lý do trước khi bỏ phiếu xuống nó sẽ giúp mọi người. Đây là tham chiếu Các toán tử tổng hợp Boolean -> $ hoặc
Amol M Kulkarni

Câu trả lời của bạn không đúng, và như bạn thấy, tôi đã nhận xét giải thích câu trả lời sai ở đâu và như thế nào.
Paul Shapiro
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.