Tôi có một cơ sở dữ liệu về sinh viên và các chi tiết liên lạc của họ. Tôi đang cố gắng tìm ra mã bưu điện chứa nhiều sinh viên nhất. Các tài liệu cho học sinh giống như thế này ...tập hợp mongodb
{studentcode: 'smi0001', firstname: 'bob', họ: 'smith', mã bưu điện: 2001}
tôi nghĩ tôi có thể sử dụng khuôn khổ hợp để tìm ra mã bưu điện với hầu hết các sinh viên bằng cách làm một cái gì đó giống như ...
db.students.aggregate({$project: { postcode: 1 }, $group: {_id: '$postcode', students: {$sum: 1}}})
này làm việc như mong đợi (trả postcodes như _id
và số lượng sinh viên trong mỗi mã bưu điện là 'sinh viên', nhưng nếu tôi thêm $sort
vào đường ống, có vẻ như cố gắng sắp xếp theo toàn bộ tuyển tập sinh viên thay vì kết quả của hoạt động $group
.
những gì tôi đang cố gắng nhìn như ...
db.students.aggregate({$project: { postcode: 1 }, $group: {_id: '$postcode', students: {$sum: 1}}, $sort: {_id: -1}})
nhưng nó trả lại toàn bộ bộ sưu tập và không quan tâm đến những điều gì đó $project
và $group
... Tôi có thiếu? Tôi nghĩ rằng tôi chỉ có thể sắp xếp theo số lượng học sinh giảm dần và trả lại mục đầu tiên. Cảm ơn bạn trước vì đã giúp đỡ.
Cảm ơn đống lời khuyên. Tôi không thể tin rằng nó chỉ là một vấn đề khung không đúng chỗ. Đây là những vấn đề tôi từng học SQL 15 năm trước, việc chuyển sang Mongodb có nghĩa là bỏ lại rất nhiều kiến thức trước đây, nhưng tôi cho rằng nó sẽ đáng giá. Chúc mừng, –
Tính năng này phù hợp với trường hợp sử dụng của bạn, nhưng cách tiếp cận này không phải lúc nào cũng đảm bảo kết quả bạn mong đợi. Ví dụ kết quả sẽ không chính xác khi bạn cần nhóm theo 'field1' nhưng giữ nó được sắp xếp theo' field2'. – astronaut
Tôi có mã bưu điện POST1, POST2, POST3, mỗi mã bưu điện không giống như số lượng sinh viên. Truy vấn sắp xếp của tôi sẽ là gì để nhận tổng của mỗi POST. db.test.aggregate ( {$ group: {_id: {'postcodes': '$ postcodes'}, sinh viên: {$ sum: 1}}}, Truy vấn sắp xếp ở đây là gì. ); –