mongodb - kumpulan pertanyaan agregasi mongo, mencari nilai maksimum
phpcn_u1582
phpcn_u1582 2017-05-17 10:02:55
0
1
1013
  1. 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")
}
phpcn_u1582
phpcn_u1582

membalas semua(1)
某草草

_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。
不清楚你的versioncreation是什么关系,creation比较大的文档version一定是比较新吗?如果这个条件成立的话,可以这样做:

db.question.aggregate([
    {$sort: {creation: -1}},
    {$group : {_id :"$deviceType", version : {$first : "$version"}}},
    {$project: {deviceType: "$_id", version: "$version"}}
]);

$firstgroup之后取第一个元素。而事先已经按creation rrreee

$first ialah elemen pertama selepas group. Unsur telah diisih mengikut penciptaan terlebih dahulu, jadi yang pertama ialah elemen terkini. 🎜
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan