Trong MongoDB, $in
toán tử truy vấn chọn các tài liệu trong đó giá trị của một trường bằng bất kỳ giá trị nào trong mảng được chỉ định.
$in
toán tử truy vấn không được nhầm lẫn với $in
toán tử đường ống tổng hợp, trả về một boolean cho biết liệu một giá trị được chỉ định có nằm trong mảng hay không.
Ví dụ
Giả sử chúng ta có một bộ sưu tập được gọi là products
với các tài liệu sau:
{ "_id" : 1, "prod" : "Shorts" } { "_id" : 2, "prod" : "Jeans", "sizes" : null } { "_id" : 3, "prod" : "Shirt", "sizes" : "L" } { "_id" : 4, "prod" : "Shirt", "sizes" : "M" } { "_id" : 5, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] } { "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
Chúng tôi có thể sử dụng $in
toán tử để chỉ chọn những tài liệu có _id
cụ thể giá trị.
Mã mẫu:
db.products.find({
_id: { $in: [ 1, 2, 3 ] }
})
Kết quả:
{ "_id" : 1, "prod" : "Shorts" } { "_id" : 2, "prod" : "Jeans", "sizes" : null } { "_id" : 3, "prod" : "Shirt", "sizes" : "L" }
Trong trường hợp này, chúng tôi chỉ muốn các tài liệu có chứa _id
giá trị của 1
, 2
hoặc 3
.
Ví dụ 2
Đây là một ví dụ khác. Lần này chúng tôi sử dụng $in
chống lại một trường khác.
db.products.find({
sizes: { $in: [ "L" ] }
})
Kết quả:
{ "_id" : 3, "prod" : "Shirt", "sizes" : "L" } { "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
Trong ví dụ này, chúng tôi đã áp dụng $in
thành các kích thước sizes
đồng ruộng.
Trong trường hợp này, tài liệu đầu tiên có giá trị là một chuỗi, trong khi hai tài liệu khác có giá trị dưới dạng một phần tử mảng. Dù bằng cách nào, tất cả các tài liệu phù hợp đã được trả lại.
So sánh các loại khác nhau được đánh giá theo thứ tự so sánh BSON.
Ví dụ về tổng hợp
Chúng ta có thể sử dụng cùng một cú pháp khi sử dụng $match
nhà điều hành đường ống tổng hợp.
Mã mẫu:
db.products.aggregate(
[
{ $match: { _id: { $in: [ 1, 2, 3 ] } } }
]
)
Kết quả:
{ "_id" : 1, "prod" : "Shorts" } { "_id" : 2, "prod" : "Jeans", "sizes" : null } { "_id" : 3, "prod" : "Shirt", "sizes" : "L" }
Và đây là lần nữa trong khi truy vấn kích thước sizes
lĩnh vực:
db.products.aggregate(
[
{ $match: { sizes: { $in: [ "L" ] } } }
]
)
Kết quả:
{ "_id" : 3, "prod" : "Shirt", "sizes" : "L" } { "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
Biểu thức chính quy
Bạn có thể sử dụng biểu thức chính quy trong truy vấn bằng cách sử dụng biểu mẫu /pattern/
.
Ví dụ:
db.products.find({
sizes: { $in: [ /^X/ ] }
})
Kết quả:
{ "_id" : 5, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] } { "_id" : 6, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 7, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] }
Trong ví dụ này, tôi trả lại tất cả các tài liệu có kích thước sizes
trường có giá trị là một chuỗi bắt đầu bằng X
hoặc một mảng trong đó ít nhất một trong các phần tử bắt đầu bằng X
.