2015-01-26 14 views
27

Tôi có một bộ sưu tập các tài liệu:MongoDB find() truy vấn: chỉ trả những giá trị duy nhất (không có bản sao)

{ 
    "networkID": "myNetwork1", 
    "pointID": "point001", 
    "param": "param1" 
} 
{ 
    "networkID": "myNetwork2", 
    "pointID": "point002", 
    "param": "param2" 
} 
{ 
    "networkID": "myNetwork1", 
    "pointID": "point003", 
    "param": "param3" 
} 
... 

pointIDs là duy nhất nhưng networkIDs thì không.

Có thể truy vấn MongoDB theo cách như vậy mà kết quả sẽ là: [myNetwork1, myNetwork2]

ngay bây giờ tôi chỉ cố gắng quay trở lại [myNetwork1, myNetwork2, myNetwork1]

tôi cần một danh sách các networkID duy nhất để điền một thành phần select2 tự động hoàn thành. Vì tôi có thể có tối đa 50 nghìn tài liệu, tôi muốn mongoDb lọc kết quả ở cấp truy vấn.

Trả lời

63

Tôi nghĩ rằng bạn có thể sử dụng db.collection.distinct(fields,query)

Bạn sẽ có thể để có được những giá trị khác biệt trong trường hợp của bạn cho NetworkID.

Nó phải là một cái gì đó như thế này:

Db.collection.distinct('NetworkID') 
+15

gì nếu tôi muốn có được ghi đầy đủ? Điều này sẽ chỉ trả về 'NetworkID'. –

+4

@ HalfBloodPrince, hồ sơ đầy đủ? 'distinct' trả về tất cả các giá trị duy nhất cho một trường. Trả lại hồ sơ hoặc hồ sơ không có ý nghĩa trong ngữ cảnh này. Bạn sẽ phải sử dụng đường ống tổng hợp [toán tử '$'] (https://docs.mongodb.com/manual/reference/operator/aggregation/group/) để có các bản ghi riêng biệt. – Paul

+1

@ HalfBloodPrince: nếu bạn muốn có một bản ghi đầy đủ, hãy xem https://stackoverflow.com/a/44887521/1587329 –

Các vấn đề liên quan