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ỏ. Nói cách khác, giá trị khác biệt là giá trị duy nhất.
Trong MongoDB, có một số cách để chúng ta có thể trả về các giá trị riêng biệt trong một truy vấn. Bài viết này trình bày 3 cách để trả về các giá trị khác biệt trong mongo shell.
Dữ liệu mẫu
Các ví dụ trên trang này sử dụng bộ sưu tập sau được gọi là pets
:
{ "_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 }
distinct()
Phương pháp
Trong MongoDB, db.collection.distinct()
phương thức 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 hoặc chế độ xem và trả về kết quả trong một mảng.
Ví dụ:
db.pets.distinct( "type" )
Kết quả:
[ "Bat", "Cat", "Dog" ]
Ba giá trị này là các giá trị riêng biệt cho loại type
trong các tài liệu trên.
pets
một phần chỉ đơn giản là đặt tên cho tập hợp để trả về các giá trị riêng biệt.
db.collection.distinct()
phương thức là một phương thức trình bao bọc cho distinct
lệnh (bên dưới).
distinct
Lệnh
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.
db.runCommand ( { distinct: "pets", key: "type" } )
Kết quả:
{ "values" : [ "Bat", "Cat", "Dog" ], "ok" : 1 }
Chúng tôi có thể thấy rằng các giá trị khác biệt giống nhau được trả về, ngoại trừ lần này chúng nằm trong một tài liệu cũng chứa thông tin khác.
$group
Toán tử tổng hợp
Tùy thuộc vào nhu cầu của mình, bạn cũng có thể sử dụng $group
toán tử tổng hợp để trả về các giá trị riêng biệt.
Ví dụ:
db.pets.aggregate( [ { $group : { _id : "$type" } } ] )
Kết quả:
{ "_id" : "Cat" } { "_id" : "Bat" } { "_id" : "Dog" }
Trong trường hợp này, các giá trị riêng biệt được trả về trong các tài liệu riêng biệt.
Cách tiếp cận này có thể hữu ích nếu bạn mong đợi kết quả của mình lớn. Nếu kết quả của bạn lớn hơn kích thước BSON tối đa (16 megabyte tại thời điểm viết bài), bạn có thể cần sử dụng phương pháp này.