sql >> データベース >  >> NoSQL >> MongoDB

mongodbのネストされた配列を更新しています

    ここに大きな質問があります。Mongoの「addToSet」および「push」操作を活用する必要がありますか?配列内の個々のアイテムだけを変更することを本当に計画している場合は、おそらくこれらの配列をオブジェクトとして構築する必要があります。

    これを構成する方法は次のとおりです。

    {
        id: 1,
        items: 
            { 
              "2" : { "blocks" : { "3" : { txt : 'hello' } } },
              "5" : { "blocks" : { "1" : { txt : 'foo'}, "2" : { txt : 'bar'} } }
            }
    }
    

    これは基本的にすべてを配列ではなくJSONオブジェクトに変換します。 $pushを使用できなくなります および$addToSet しかし、これですべてが簡単になると思います。たとえば、クエリは次のようになります。

    db.objects.update({'items.2': {$exists:true} }, {'$set': {'items.2.blocks.0.txt': 'hi'}})

    また、「ID」をダンプしたことにも気付くでしょう。このようなものをネストする場合は、通常、「ID」をその番号をインデックスとして使用するだけで置き換えることができます。 「ID」の概念が暗示されるようになりました。

    この機能は、表現力豊かなアップデートで3.6に追加されました。

    db.objects.update( {id: 1 }, { $set: { 'items.$[itm].blocks.$[blk].txt': "hi", } }, { multi: false, arrayFilters: [ { 'itm.id': 2 }, { 'blk.id': 3} ] } )



    1. bluebirdを使用してnodejsですべてのプロミスが終了するのを待ちます

    2. AndroidアプリでMongoDBステッチを使用する方法

    3. ClusterControlを使用したデータベースユーザー管理

    4. MongoDB3.0WiredTigerでのインデックスプレフィックス圧縮