mongodb内嵌文档查找和修改问题
ringa_lee
ringa_lee 2017-04-24 09:12:57
0
3
1226

数据的格式是这样的:

{
    "_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_lee
ringa_lee

ringa_lee

membalas semua(3)
左手右手慢动作

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.

迷茫

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}}})
Peter_Zhu

Adakah ID subdokumen anda meningkat secara automatik?

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