数据库 - Mongodb多层嵌套数组如何精确查询?
漂亮男人
漂亮男人 2017-05-02 09:21:41
0
1
1016
{
    "excelID": "10001",
    "excelName": "一年级学生信息",
    "sheetArrays": [
        {
            "sheetName": "一班",
            "studentInfos": [
                {
                    "name": "张三",
                    "sex": "男"
                },
                {
                    "name": "李四",
                    "sex": "男"
                }
            ]
        },
        {
            "sheetName": "二班",
            "studentInfos": [
                {
                    "name": "王五",
                    "sex": "男"
                },
                {
                    "name": "赵六",
                    "sex": "女"
                }
            ]
        }
    ]
}

我希望通过一条语句查出所有sex为男的人员的名称;

我还希望能通过一条语句查出name为王五对应的班级和他的基本信息,求朋友们为我答疑解惑,感激不尽。

漂亮男人
漂亮男人

membalas semua(1)
过去多啦不再A梦

Apakah konsep pernyataan? aggregationAdakah ia dikira sebagai kenyataan?

db.test3.aggregate([
    {$match: {"sheetArrays.studentInfos.sex": '男'}},
    {$unwind: "$sheetArrays"},
    {$unwind: "$sheetArrays.studentInfos"},
    {$match: {"sheetArrays.studentInfos.sex": '男'}},
]);
db.test3.aggregate([
    {$match: {"sheetArrays.studentInfos.name": '王五'}},
    {$unwind: "$sheetArrays"},
    {$unwind: "$sheetArrays.studentInfos"},
    {$match: {"sheetArrays.studentInfos.name": '王五'}},
]);

Walaupun boleh dilakukan, sebenarnya struktur data seperti itu tidak munasabah.
Reka bentuk model MongoDB ialah topik besar Jika anda berminat, anda boleh membaca bab pemodelan data dokumen dengan teliti.
Prinsip asas sebenarnya tidak ada prinsip Ini lebih menyusahkan daripada memenuhi paradigma perhubungan Tidak ada garis panduan yang memberitahu anda apa yang perlu dilakukan. Tetapi pada asasnya, model data yang anda pilih harus mengambil kira pelbagai senario tentang cara menggunakannya, cara mengemas kini, cara memasukkan, cara membuat pertanyaan... Model yang boleh memenuhi senario penggunaan adalah model yang baik.
Kembali ke model anda dan lihat apa yang salah:

  1. Ambil enjin WT sebagai contoh penguncian peringkat Dokumen Apabila sesiapa dalam mana-mana kelas membuat perubahan, perubahan akan dibuat pada dokumen tersebut, semua operasi ini saling eksklusif dan cekap bayangkan betapa teruknya.

  2. Seperti yang anda lihat, pertanyaan di atas adalah tidak elegan dan tidak cekap. Apatah lagi mengemas kini, ia menyusahkan hanya memikirkannya.
    Jadi ini bukan model yang bagus. Walaupun MongoDB menyokong anti-paradigma, jangan terlalu melampau dengan anti-paradigma demi anti-paradigma. Cuba model lain yang lebih mudah untuk anda gunakan.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan