Rumah > Soal Jawab > teks badan
Saya akan bentangkan kes tersebut dahulu supaya semua orang faham maksud saya:
/a/1190000004157112
Pautan di atas adalah pertanyaan sqlgroup biasa, tetapi masalah yang saya hadapi sekarang ialah menggunakan mongo untuk melakukan pertanyaan kumpulan
Pertanyaan pengagregatan benar-benar membunuh saya Berikut adalah data simulasi:
(Tolong maafkan data saya, dia tidak dihalang dan bebas)
{
"_id" : ObjectId("590c15751f70bd329f8a972d"),
"_class" : "com.birdnest.model.AppPublish",
"user" : "admin",
"deviceType" : "nurse",
"version" : "1.1。2。2",
"message" : "范德萨312313213213范德萨",
"creation" : ISODate("2017-05-05T06:02:29.300Z")
}
{
"_id" : ObjectId("590c15751f70bd329f8a972e"),
"_class" : "com.birdnest.model.AppPublish",
"user" : "admin",
"deviceType" : "nurse",
"version" : "1.1。2。2",
"message" : "范德萨312313213213范德萨",
"creation" : ISODate("2017-05-05T06:02:29.447Z")
}
{
"_id" : ObjectId("590c157b1f70bd329f8a972f"),
"_class" : "com.birdnest.model.AppPublish",
"user" : "admin",
"deviceType" : "bed",
"version" : "1.1。2。2",
"message" : "范1123德萨312313213213范德萨",
"creation" : ISODate("2017-05-05T06:02:35.731Z")
}
{
"_id" : ObjectId("590c157c1f70bd329f8a9730"),
"_class" : "com.birdnest.model.AppPublish",
"user" : "admin",
"deviceType" : "bed",
"version" : "1.1。2。2",
"message" : "范1123德萨312313213213范德萨",
"creation" : ISODate("2017-05-05T06:02:36.164Z")
}
{
"_id" : ObjectId("590c158a1f70bd329f8a9733"),
"_class" : "com.birdnest.model.AppPublish",
"user" : "admin",
"deviceType" : "room",
"version" : "1.1.112",
"message" : "范1123德萨312313213213范德萨",
"creation" : ISODate("2017-05-05T06:02:50.082Z")
}
{
"_id" : ObjectId("590c158a1f70bd329f8a9734"),
"_class" : "com.birdnest.model.AppPublish",
"user" : "admin",
"deviceType" : "room",
"version" : "1.1.112",
"message" : "范1123德萨312313213213范德萨",
"creation" : ISODate("2017-05-05T06:02:50.238Z")
}
Keperluan adalah seperti ini
Klasifikasikan mengikut jenis peranti dan dapatkan nombor versi terkini setiap kategori
Result yang saya nak macam ni
/* 1 */
{
"deviceType" : "bed",
"version" :"1.1.112")
}
/* 2 */
{
"deviceType" : "room",
"version" :"1.1.112")
}
/* 3 */
{
"deviceType" : "nurse",
"version" : "1.1.112")
}
Pernyataan berikut ditulis oleh saya sendiri, tetapi terdapat banyak masalah
Walaupun saya melakukan apa yang saya tulis, hasil yang diingini tidak dapat dipaparkan
db.appPublish.aggregate(
{$group : {_id :"$deviceType",creation : {$max : "$creation"}}}
);
1._id tidak boleh dipetakan ke objek
2.versi tidak boleh ditulis dalam kumpulan
Saya benar-benar tidak faham sintaks ini
Hasilnya
/* 1 */
{
"_id" : "bed",
"creation" : ISODate("2017-05-05T06:02:44.750Z")
}
/* 2 */
{
"_id" : "room",
"creation" : ISODate("2017-05-05T06:02:50.397Z")
}
/* 3 */
{
"_id" : "nurse",
"creation" : ISODate("2017-05-05T06:02:29.447Z")
}
某草草2017-05-17 10:04:55
_id
sudah tentu tidak dipetakan kepada _id
sebenar _id
di sini merujuk kepada kunci group
.
Saya tidak tahu apakah hubungan antara versi
dan creation
anda adalah creation
Dokumen yang agak besar mestilah versi
Adakah ia agak baharu? Jika syarat ini benar, anda boleh melakukan ini: _id
当然映射不到真正的_id
上,这里的_id
指的是group
的key。
不清楚你的version
和creation
是什么关系,creation
比较大的文档version
一定是比较新吗?如果这个条件成立的话,可以这样做:
db.question.aggregate([
{$sort: {creation: -1}},
{$group : {_id :"$deviceType", version : {$first : "$version"}}},
{$project: {deviceType: "$_id", version: "$version"}}
]);
$first
即group
之后取第一个元素。而事先已经按creation
rrreee
$first
ialah elemen pertama selepas group
. Unsur telah diisih mengikut penciptaan
terlebih dahulu, jadi yang pertama ialah elemen terkini. 🎜