cari

Rumah  >  Soal Jawab  >  teks badan

mongodb - masalah pertanyaan kompleks mongo

Json asal

{
    "_id" : ObjectId("58b3a8dc96fbc7cfb8287093"),
    "name" : "《地下水质量标准》",
    "GBNumber" : "GB/T 14848-93",
    "dataEntryClerk" : "handsomeboy",
    "lastModified" : "Fri Feb 27 2017 12:03:40 GMT+0800",
    "contents" : [ 
        {
            "standardID" : "9527-01",
            "unit" : "mg/L",
            "classifications" : [ 
                {
                    "level" : "I",
                    "upperLimit" : "0",
                    "lowerLimit" : "50"
                }, 
                {
                    "level" : "II",
                    "upperLimit" : "50",
                    "lowerLimit" : "150"
                }, 
                {
                    "level" : "III",
                    "upperLimit" : "150",
                    "lowerLimit" : "250"
                }, 
                {
                    "level" : "IV",
                    "upperLimit" : "250",
                    "lowerLimit" : "350"
                }, 
                {
                    "level" : "V",
                    "upperLimit" : "350",
                    "lowerLimit" : "-1"
                }
            ]
        }, 
        {
            "standardID" : "7439-89-6",
            "unit" : "mg/L",
            "classifications" : [ 
                {
                    "level" : "I",
                    "upperLimit" : "0",
                    "lowerLimit" : "0.1"
                }, 
                {
                    "level" : "II",
                    "upperLimit" : "0.1",
                    "lowerLimit" : "0.2"
                }, 
                {
                    "level" : "III",
                    "upperLimit" : "0.2",
                    "lowerLimit" : "0.3"
                }, 
                {
                    "level" : "IV",
                    "upperLimit" : "0.3",
                    "lowerLimit" : "0.4"
                }, 
                {
                    "level" : "V",
                    "upperLimit" : "0.5",
                    "lowerLimit" : "-1"
                }
            ]
        }
    ]
}

Hasil yang anda ingin tanya:

{
    "contents" : [ 
        {
            "standardID" : "9527-01",
            "unit" : "mg/L",
            "classifications" : [ 
                {
                    "level" : "I",
                    "upperLimit" : "0",
                    "lowerLimit" : "50"
                }, 
                {
                    "level" : "II",
                    "upperLimit" : "50",
                    "lowerLimit" : "150"
                }, 
                {
                    "level" : "III",
                    "upperLimit" : "150",
                    "lowerLimit" : "250"
                }, 
                {
                    "level" : "IV",
                    "upperLimit" : "250",
                    "lowerLimit" : "350"
                }, 
                {
                    "level" : "V",
                    "upperLimit" : "350",
                    "lowerLimit" : "-1"
                }
            ]
        }
    ]
}

Bolehkah anda beritahu saya cara menulis db.xxx.find()

我想大声告诉你我想大声告诉你2789 hari yang lalu783

membalas semua(4)saya akan balas

  • 怪我咯

    怪我咯2017-05-02 09:27:22

    Saya ingin membuat ulasan terlebih dahulu:

    Tanya soalan dan siarkan contoh masalah boleh dihasilkan yang diminimumkan Jika anda menyiarkan dokumen yang begitu panjang, semua orang akan bosan membacanya.


    Apa yang anda perlukan sebenarnya ialah memulangkan beberapa dokumen tertentu dalam tatasusunan , bukan keseluruhan tatasusunan.

    1 Jika anda hanya perlu mengembalikan satu elemen dalam tatasusunan

    db.xxx.find(
        {'contents.standardID': '9527-01'},
        {contents: {$elemMatch: {standardID: '9527-01'}}, _id: 0}
    )
    

    Baris pertama ialah syarat pertanyaan, dan baris kedua ialah syarat penapis. Anda boleh melihat bahawa pengendali juga boleh digunakan dalam keadaan penapis. Walau bagaimanapun, pengendali ini hanya akan mengembalikan elemen pertama yang memenuhi syarat dan memerlukan MongoDB versi 2.2 atau lebih tinggi .

    Atau gunakan $ pemilih subskrip:

    db.xxx.find(
        {'contents.standardID': '9527-01'},
        {'contents.$': 1, _id: 0}
    )
    

    Syarat pertanyaan dalam contoh di atas juga boleh digunakan $elemMatch.

    Jika anda perlu mengembalikan berbilang elemen padanan dalam tatasusunan:

    2 $unwind

    beroperasi pada $unwind sebagai strim dokumen bebas dengan menggunakan contents Untuk kod, lihat jawapan @bguo.
    Tetapi ini boleh menyebabkan masalah prestasi jika tatasusunan anda besar.

    3 $filter

    Ini ialah operator baharu dalam versi 3.2, digunakan untuk menapis kandungan yang dikembalikan.

    db.xxx.aggregate(
        {$match: {'contents.standardID': '9527-01'}},
        {$project: {
            contents: {$filter: {
                input: '$contents',
                as: 'contents',
                cond: {$eq: ['$$contents.standardID', '9527-01']}
            }},
            _id: 0
        }}
    )
    

    Sudah tentu anda juga boleh menggunakan $redact (versi 2.6), atau mapReduce() dan banyak kaedah lain.

    balas
    0
  • 为情所困

    为情所困2017-05-02 09:27:22

    Syarat pertanyaan. Contohnya nama

    db.xxx.find({"name" : "《地下水质量标准》" } ,function(err, data){ 
        if(data){
            console.log(data.contents)
        }
    })

    balas
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-02 09:27:22

    Satu kaedah pelaksanaan: menggunakan Agregat MongoDB.

    1. Mula-mula gunakan $unwind pada kandungan yang mengandungi tatasusunan

    2. Kemudian gunakan $match untuk menggunakan syarat penapisan

    3 Akhir sekali, gunakan $project untuk mengekalkan medan yang diperlukan

    Rujuk kod di bawah

     db.test1.aggregate([
                        {$unwind : "$contents"},
                        {$match : { name :  "《地下水质量标准》", "contents.standardID" :  "9527-01"}},
                        { $project : { contents : 1 , _id : 0 }}
                        ])

    Untuk rujukan.

    Sayangi MongoDB!

    ------------------------ Pemisah cantik------------------ --- ----------

    Komuniti Cina MongoDB mempunyai banyak aktiviti luar talian, sila klik di bawah:

    Perbincangan Pedang Huashan 2017|Komuniti Cina MongoDB

    Stesen Hangzhou pada bulan Mac akan datang tidak lama lagi! ! ! Rakan-rakan yang berminat sila daftar segera! ! !

    balas
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-02 09:27:22

    db.xxx.find({"contents.standardID": "9527-01"}, {contents: 1})
    
    _id字段会自动输出,就忽略吧

    balas
    0
  • Batalbalas