2011-01-21 28 views
13

Tôi cần một truy vấn để lấy key riêng biệt với sắp xếp trên cơ sở số điểm trong MongoDB 1.6.5có được giá trị khác biệt với Sắp xếp dữ liệu

Tôi có hồ sơ Giống như

{key ="SAGAR" 
score =16 
note ="test1" 
} 

{key ="VARPE" 
score =17 
note ="test1" 
} 

{key ="SAGAR" 
score =16 
note ="test2" 
} 

{key ="VARPE" 
score =17 
note ="test2" 
} 

Tôi cần một truy vấn mà sắp xếp tất cả các hồ sơ về số điểm và trả về cho tôi chìa khóa riêng biệt .....

+0

Vì vậy, kết quả mong muốn sẽ là gì nếu bạn chạy truy vấn này trên tập dữ liệu này (luôn là điều tốt nhất để hiển thị khi đặt câu hỏi truy vấn) –

+0

Ngôn ngữ lập trình nào bạn sử dụng? –

+0

@ Bugal13 Tôi đang sử dụng SCALA –

Trả lời

2

distinct command trong MongoDB:

bạn có thể sử dụng riêng biệt như thế này:

db.test.distinct({"key":true,"score":true,"note":true}); 

như nhau trong cơ sở dữ liệu quan hệ:

SELECT DISTINCT key,score,note FROM test; 

Và hơn sort result bằng cách thêm mã sau đây:

.sort({score : 1}) // 1 = asc, -1 = desc 

Tổng số kết quả sẽ như thế này:

db.test.distinct({"key":true,"score":true,"note":true}).sort({score : 1}); 
+11

Rõ ràng điều này không còn khả thi (v3.8.0) - lỗi sản lượng mà sắp xếp không thể được sử dụng với khác biệt. Bạn có thể xác nhận? – cyberwombat

+5

sắp xếp không thể sử dụng với riêng biệt –

+0

Có yêu cầu tính năng hoạt động, vui lòng bỏ phiếu cho nó nếu bạn có cùng sự cố: https://jira.mongodb.org/browse/SERVER-2130 – UpTheCreek

9

Bạn có thể sử dụng khung tổng hợp để nhóm theo phần tử bạn muốn phân biệt (nhóm làm cho nó khác biệt). Vì vậy, nếu bạn muốn sắp xếp trên số điểm sau đó nhận được chìa khóa riêng biệt mà bạn có thể làm như sau - sắp xếp theo điểm số, nhóm bằng chìa khóa và thêm điểm như mảng của các yếu tố (đã được sắp xếp):

db.test.aggregate([ 
    { $sort : { score : -1 } }, 
    { $group : {_id : "$key", scores : { $push : "$score" } } } 
]) 

này sẽ dẫn đến các phím riêng biệt cùng với một mảng điểm số là những điểm có trong tài liệu có các khóa trùng lặp. Tôi không chắc đây là chính xác những gì bạn đang tìm kiếm và tôi biết đây là một câu hỏi cũ nhưng tôi nghĩ điều này có thể giúp một người khác nhìn vào nó trong tương lai - như một cách khác để làm điều này.

+0

$ push là toán tử sai cho mục đích đó. Sử dụng $ addToSet để thay thế. – user3072843

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