cari

Rumah  >  Soal Jawab  >  teks badan

mongodb内嵌文档查找和修改问题

数据的格式是这样的:

{
    "_id" : 1,
    "people_id" : 1,
    "albums" : [
        {
            "id" : 1,
            "name" : "123",
            "privilege" : 0,
        },
        {
            "id" : 2,
            "name" : "Q",
            "privilege" : 5,
        },
        {
            "id" : 3,
            "name" : "Q",
            "privilege" : 5,
        },
    ]
}

{
    "_id" : 2,
    "people_id" : 2,
    "albums" : [
        {
            "id" : 1,
            "name" : "4",
            "privilege" : 0,
        },
        {
            "id" : 2,
            "name" : "5",
            "privilege" : 0,
        }
    ]
}

现在我想的是
1 , 查询people_id 为 1 且 privilege 为 5的内嵌文档,mongodb的查询命令怎么写的啊

2,更新people_id 为 2 且权限为 id为2的内嵌文档的name字段值为 6,更新命令怎么写的啊

查询我用
db.find({"people_id" : 1,"albums":{"$elemMatch" : {"privilege" : 5}}})
来尝试匹配过,但是匹配出了:

{
    "_id" : 1,
    "people_id" : 1,
    "albums" : [
        {
            "id" : 1,
            "name" : "123",
            "privilege" : 0,
        },
        {
            "id" : 2,
            "name" : "Q",
            "privilege" : 5,
        },
        {
            "id" : 3,
            "name" : "Q",
            "privilege" : 5,
        },
    ]
}

我并不想要id为1的那个,只想唯一匹配id为2和3那个

修改,我确实不会,
还请大家帮忙提下解决方法,非常谢谢咯!

ringa_leeringa_lee2797 hari yang lalu1221

membalas semua(3)saya akan balas

  • ringa_lee

    ringa_lee2017-04-24 09:14:57

    Pernyataan pertanyaan boleh dipermudahkan seperti berikut:

    db.demo.find({"people_id" : 1, "albums.privilege": 5})
    

    Hasil pertanyaan mengembalikan dokumen yang memenuhi syarat yang sepadan Walaupun medan yang dikembalikan boleh dipetakan, ia tidak boleh hanya mengembalikan dokumen yang anda nyatakan id为2和3. Tetapi sekarang setelah anda memperoleh dokumen json yang memenuhi syarat, anda boleh menulis program untuk mendapatkan subdokumen terbenam yang dikehendaki.

    Kenyataan kemas kini adalah seperti berikut:

    db.demo.update({people_id:2, "albums.id":2}, { $set : {"albums.$.name":6 }})
    

    Ia hanya mengemas kini subdokumen pertama yang sepadan dalam tatasusunan, tetapi albums.idnampaknya unik dan harus memenuhi keperluan anda.

    balas
    0
  • 迷茫

    迷茫2017-04-24 09:14:57

    Ada penyelesaian untuk #1. $elemMatch juga boleh digunakan dalam parameter kedua kaedah cari untuk mengehadkan elemen dalam tatasusunan yang dikembalikan. Seperti berikut:

    db.demo.find({"albums.privilege":5, people_id:1}, {"albums":{$elemMatch:{privilege:5}}})
    

    balas
    0
  • 天蓬老师

    天蓬老师2017-04-24 09:14:57

    Adakah ID subdokumen anda meningkat secara automatik?

    balas
    0
  • Batalbalas