Trong MongoDB, $nin
toán tử truy vấn chọn các tài liệu mà giá trị của trường không nằm trong mảng được chỉ định hoặc trường không tồn tại.
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" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] } { "_id" : 2, "prod" : "Hat", "sizes" : [ "S", "L", "XL" ] } { "_id" : 3, "prod" : "Cap", "sizes" : [ "XS", "S", "M", "L", "XL" ] } { "_id" : 4, "prod" : "Shirt", "sizes" : "L" } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
Chúng ta có thể sử dụng $nin
toán tử để chỉ chọn những tài liệu không có _id
cụ thể giá trị.
Mã mẫu:
db.products.find({
_id: { $nin: [ 1, 2, 3 ] }
})
Kết quả:
{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
Trong trường hợp này, chúng tôi chỉ muốn các tài liệu không chứa một _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 $nin
chống lại một trường khác.
db.products.find({
sizes: { $nin: [ "L" ] }
})
Kết quả:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
Trong ví dụ này, chúng tôi đã áp dụng $nin
thành các kích thước sizes
đồng ruộng.
Lưu ý rằng tài liệu 6 đã được trả lại, mặc dù nó không có các kích thước sizes
đồng ruộng. Điều này chính xác như mong đợi - nếu trường không tồn tại, trường này sẽ được đưa vào $nin
kết quả.
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: { $nin: [ 1, 2, 3 ] } } }
]
)
Kết quả:
{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
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: { $nin: [ "L" ] } } }
]
)
Kết quả:
{ "_id" : 1, "prod" : "Bat", "sizes" : [ "S", "M", "XL", "XXL" ] } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
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: { $nin: [ /^X/ ] }
})
Kết quả:
{ "_id" : 4, "prod" : "Shirt", "sizes" : "L" } { "_id" : 5, "prod" : "Jeans", "sizes" : null } { "_id" : 6, "prod" : "Shorts" }
Trong ví dụ này, tôi trả lại tất cả các tài liệu không có kích thước sizes
trường bắt đầu bằng X
.