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

Lệnh khác biệt MongoDB

Trong MongoDB, distinct Lệnh tổng hợp tìm các giá trị riêng biệt cho một trường được chỉ định trên một tập hợp duy nhất.

Nó trả về một tài liệu có chứa một mảng các giá trị riêng biệt, cũng như một tài liệu được nhúng với thống kê truy vấn và kế hoạch truy vấn.

Các giá trị khác biệt là những giá trị có các bản sao thừa bị loại bỏ. Giá trị khác biệt là giá trị duy nhất. Ví dụ:nếu bạn có 2 hoặc 3 tài liệu có cùng giá trị, thì distinct lệnh sẽ chỉ trả về một giá trị.

Ngoài ra còn có một db.collection.distinct() , là một phương thức trình bao bọc cho distinct lệnh.

Ví dụ

Giả sử chúng ta có một bộ sưu tập có tên là pets với các tài liệu sau.

{ "_id" : 1, "name" : "Wag", "type" : "Dog", "weight" : 20 }
{ "_id" : 2, "name" : "Bark", "type" : "Dog", "weight" : 10 }
{ "_id" : 3, "name" : "Meow", "type" : "Cat", "weight" : 7 }
{ "_id" : 4, "name" : "Scratch", "type" : "Cat", "weight" : 8 }
{ "_id" : 5, "name" : "Bruce", "type" : "Bat", "weight" : 3 }
{ "_id" : 6, "name" : "Fetch", "type" : "Dog", "weight" : 17 }
{ "_id" : 7, "name" : "Jake", "type" : "Dog", "weight" : 30 }

Chúng ta có thể sử dụng distinct lệnh để trả về các loại vật nuôi riêng biệt.

distinct lệnh chấp nhận tập hợp là trường đầu tiên và khóa là trường thứ hai. Chìa khóa là trường trả về các giá trị riêng biệt.

db.runCommand ( { distinct: "pets", key: "type" } )

Kết quả:

{ "values" : [ "Bat", "Cat", "Dog" ], "ok" : 1 }

Trong ví dụ này, mặc dù có bốn con chó và hai con mèo trong bộ sưu tập, mảng chỉ chứa một con trong số đó. distinct lệnh loại bỏ các giá trị trùng lặp.

Tài liệu gốc chỉ có một con dơi và vì vậy distinct lệnh không thay đổi điều đó - không có giá trị trùng lặp nào để loại trừ.

Tài liệu được nhúng

Bạn có thể sử dụng ký hiệu dấu chấm để nhận các giá trị khác biệt từ một trường được nhúng

Giả sử chúng ta có một bộ sưu tập được gọi là products chứa các tài liệu sau:

{ "_id" : 1, "product" : { "name" : "Shirt", "color" : "White" }, "sizes" : [ "S", "M", "L" ] }
{ "_id" : 2, "product" : { "name" : "Shirt", "color" : "Green" }, "sizes" : [ "S", "M", "XL" ] }
{ "_id" : 3, "product" : { "name" : "Shirt", "color" : "White" }, "sizes" : [ "S", "M", "L" ] }
{ "_id" : 4, "product" : { "name" : "Shorts", "color" : "Green" }, "sizes" : [ "M", "XS" ] }
{ "_id" : 5, "product" : { "name" : "Shorts", "color" : "Brown" }, "sizes" : [ "S", "M" ] }
{ "_id" : 6, "product" : { "name" : "Cap", "color" : "Purple" }, "sizes" : [ "M" ] }
{ "_id" : 7, "product" : { "name" : "Shoes", "color" : "Brown" }, "sizes" : [ "S", "M", "L" ] }
{ "_id" : 8, "product" : { "name" : "Shirt", "color" : "White" }, "sizes" : [ "M", "L", "XL" ] }
{ "_id" : 9, "product" : { "name" : "Cap", "color" : "Green" }, "sizes" : [ "M", "L" ] }

Chúng tôi có thể sử dụng truy vấn sau để trả về các giá trị khác biệt cho tên sản phẩm.

db.runCommand ( { distinct: "products", key: "product.name" } )

Kết quả:

{ "values" : [ "Cap", "Shirt", "Shoes", "Shorts" ], "ok" : 1 }

Chúng ta có thể làm điều tương tự đối với color trường.

db.runCommand ( { distinct: "products", key: "product.color" } )

Kết quả:

{ "values" : [ "Brown", "Green", "Purple", "White" ], "ok" : 1 }

Nhận các giá trị riêng biệt từ một mảng

Đây là cách sử dụng distinct lệnh để nhận các giá trị khác biệt từ mảng trên.

db.runCommand ( { distinct: "products", key: "sizes" } )

Kết quả:

{ "values" : [ "L", "M", "S", "XL", "XS" ], "ok" : 1 }

Sử dụng distinct với một Truy vấn

Bạn có thể cung cấp một truy vấn để chỉ định các tài liệu mà từ đó lấy các giá trị riêng biệt. Để thực hiện việc này, hãy thêm truy vấn sau khóa.

Ví dụ:

db.runCommand ( { 
    distinct: "products", 
    key: "product.name", 
    query: { "sizes": "S" } 
    } )

Kết quả:

{ "values" : [ "Shirt", "Shoes", "Shorts" ], "ok" : 1 }

Thông tin thêm

distinct lệnh cũng chấp nhận các trường khác, chẳng hạn như comment , readConcerncollation (cho phép bạn chỉ định các quy tắc theo ngôn ngữ cụ thể để so sánh chuỗi, chẳng hạn như quy tắc cho chữ cái viết hoa và dấu trọng âm).

Xem tài liệu MongoDB để biết thêm thông tin.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Dừng mongodb bỏ qua các ký tự đặc biệt?

  2. Làm cách nào để thực hiện các truy vấn không phân biệt chữ hoa chữ thường trên Mongodb?

  3. Truy vấn Mongoose trong đó giá trị không rỗng

  4. Tích hợp &Dịch vụ có sẵn từ MongoDB cho Đám mây

  5. Làm việc với các ký tự đặc biệt trong bộ sưu tập Mongo