MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Toán tử truy vấn MongoDB $ nin

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 .


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Ẩn chính xác thông tin đăng nhập cơ sở dữ liệu

  2. Tạo mối quan hệ Khoá ngoại trong Mongoose

  3. Cách sắp xếp mongodb với pymongo

  4. Cách trả về dữ liệu JSON từ php MongoCursor

  5. Cuộc chiến của các cơ sở dữ liệu NoSQL - So sánh MongoDB và CouchDB