Öğrencilerin bir veritabanı ve iletişim bilgilerini aldım. En çok öğrenciyi barındıran posta kodunu bulmaya çalışıyorum. {: 'Smi0001', ad: 'bob', soyadı: 'smith', posta kodu: 2001 studentcode}mongodb aggregation sort
I öğrencileri için belgeler ...
şuna benzer Ben ... şey gibi yaparak en öğrencilerle posta kodu bulmak için (beklenen
_id
olarak posta kodları ve öğrenci numarasını verir gibi çalıştığınıdb.students.aggregate({$project: { postcode: 1 }, $group: {_id: '$postcode', students: {$sum: 1}}})
toplama çerçevesini kullanabilirsiniz düşünce her posta kodu 'öğrenci' olarak, ancak
$sort
'u boru hattına eklerseniz,$group
işleminin sonuçları yerine tüm öğrenci koleksiyonuna göre sıralama yapmayı deneyebilirsiniz. Ben böyle bir görünüm çalıştığım şey...
db.students.aggregate({$project: { postcode: 1 }, $group: {_id: '$postcode', students: {$sum: 1}}, $sort: {_id: -1}})
ama bütün toplama döner ve
$project
ve$group
... ben eksik bir şey göz ardı? Az sayıda öğrenci sayısına göre sıralayabileceğimi ve ilk maddeyi iade edebileceğimi düşündüm. Yardımlarınız için şimdiden teşekkür ederiz. Neredeyse vardı
Tavsiye için yığınlar için teşekkürler. Sadece yanlış yerleştirilmiş bir parantez sorunu olduğuna inanamıyorum. Bunlar, 15 yıl önce SQL öğrenmeyi alışkanlık haline getiren bir çeşit problemlerdi, mongodb'e geçme, çok fazla ön bilginin geride kalması anlamına geliyordu, ama buna değeceğimi düşünüyorum. Şerefe, –
Kullanım durumunuz için çalışır, ancak bu yaklaşım her zaman görmeyi beklediğiniz sonuçları garanti etmez. Örneğin, "field1" ile gruplandırmanız gerektiğinde sonuçlar yanlış olacaktır, ancak "field2" ile sıralamaya devam edin. – astronaut
POST1, POST2, POST3 posta kodlarım vardı, her posta kodu öğrencilerin sayısından farklı. Her bir POST’un toplamını almak için sıralama sorgum ne olmalıdır? db.test.aggregate ( {$ grubu: {_ID: { 'posta kodları': '$ posta kodları'}, öğrenciler: {$ toplamı: 1}}}, ne tür sorgu burada olmalı .); –