Từ tài liệu chính thức của họ, hoặc- so với trong :
Nếu bạn có những tài liệu như bên dưới:
[
{
"price": 100
},
{
"price": 200
},
{
"price": 300
},
{
"price": 400
},
{
"price": 500
}
]
Nếu bạn muốn nhận tài liệu ở đâu price
bằng 100
hoặc 500
, truy vấn như:
db.collection.find({ price: { $in: [ 100, 500 ] } })
Bằng cách làm như trên, truy vấn rất đơn giản và sạch sẽ. Bạn cũng có thể sử dụng $or
thay vì $in
nhưng tại sao bạn lại bỏ qua ký hiệu viết tắt và cố gắng làm cho truy vấn của bạn trông cồng kềnh bằng cách thêm nhiều đối tượng của cùng một trường lặp đi lặp lại?
Theo mặc định, nếu bạn muốn làm OR
logic trên hai toán tử khác nhau, bạn sẽ sử dụng $or
Nhưng khi nào thì sử dụng $or
trên cùng một trường:
db.collection.find({ $or: [ { price: { $lt: 200 } }, { price: { $gt: 400 } } ] })
Như ở trên, khi bạn có nhiều điều kiện khác nhau để khớp trên cùng một trường, bạn sẽ sử dụng nó.
Hai truy vấn này mang lại kết quả giống nhau khi được thực thi nhưng khi bạn sử dụng $in
- nếu giá trị đầu vào là số thẳng hoặc có thể là chuỗi hoặc các kiểu khác trong đó giá trị đầu vào sẽ khớp chính xác với giá trị của price
trong tài liệu, nhưng khi bạn sử dụng $or
bạn đang kiểm tra các điều kiện khác nhau trên cùng một trường.
Kiểm tra: mongoplayground