cari

Rumah  >  Soal Jawab  >  teks badan

mongodb - kumpulan pertanyaan agregasi mongo, mencari nilai maksimum

  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_u1582phpcn_u15822753 hari yang lalu996

membalas semua(1)saya akan balas

  • 某草草

    某草草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。
    不清楚你的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. 🎜

    balas
    0
  • Batalbalas