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

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

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 .


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Tối đa và tối thiểu trong mongodb

  2. MongoDB:Làm thế nào để phân tích cú pháp ngày trong phiên bản 3.6 mongoDb?

  3. Các ABC của NestJS:Hướng dẫn cho người mới bắt đầu với MongoDB (Mongoose).

  4. Mongo thứ tự theo độ dài của mảng

  5. Giới thiệu về Máy chủ Percona cho MongoDB 4.2