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

数据的格式是这样的:

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

全員に返信(3)
左手右手慢动作

クエリステートメントは次のように簡略化できます:

リーリー

クエリ結果は、一致条件を満たすドキュメントを返します。返されたフィールドはマッピングできますが、実際には、前述の id 2 および 3 を持つドキュメントのみを返すことはできません。ただし、条件を満たす json ドキュメントを取得したので、必要な埋め込みサブドキュメントを取得するプログラムを作成できます。 id为2和3的文档。不过既然已经得到了满足条件的json文档,可以写程序来获取想要的内嵌子文档吧。

更新语句如下:

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

不过只是更新数组中第一个匹配的子文档,不过albums.id

更新ステートメントは次のとおりです: 🎜 リーリー 🎜配列内の最初に一致するサブドキュメントを更新するだけですが、albums.id は一意であるようで、ニーズを満たしているはずです。 🎜
いいねを押す +0
迷茫

#1には解決策があります。 $elemMatch を find メソッドの 2 番目のパラメーターで使用して、返される配列内の要素を制限することもできます。以下の通り:

リーリー
いいねを押す +0
Peter_Zhu

サブドキュメント ID は自動的に増加しますか?

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート