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

Mongodbは深くネストされたサブドキュメントを更新します

    残念ながら、$は使用できません キーごとに複数回演算子を使用するため、残りの部分には数値を使用する必要があります。のように:

    db.myCollection.update({
        "id": 1, 
        "forecasts.forecast-id": 123, 
        "forecasts.levels.level": "proven", 
        "forecasts.levels.configs.config": "Custom 1"
      },
      {"$set": {"forecasts.$.levels.0.configs.0": newData}}
    )
    

    ネストされた配列を更新するためのMongoDBのサポートは不十分です。したがって、データを頻繁に更新する必要がある場合は、それらの使用を避け、代わりに複数のコレクションを使用することを検討することをお勧めします。

    1つの可能性:forecastsを作成する 独自のコレクションであり、levelの固定セットがあると仮定します 値、levelを作成します 配列ではなくオブジェクト:

    {
      _id: 123,
      parentId: 1,
      name: "Forecast 1", 
      levels: {
        proven: { 
          configs: [
            { 
              config: "Custom 1",
              variables: [{ x: 1, y:2, z:3}]
            }, 
            { 
              config: "Custom 2",
              variables: [{ x: 10, y:20, z:30}]
            }, 
          ]
        },
        likely: {
          configs: [
            { 
              config: "Custom 1",
              variables: [{ x: 1, y:2, z:3}]
            }, 
            { 
              config: "Custom 2",
              variables: [{ x: 10, y:20, z:30}]
            }, 
          ]
        }
      }
    }
    

    次に、次を使用して更新できます:

    db.myCollection.update({
        _id: 123,
        'levels.proven.configs.config': 'Custom 1'
      },
      { $set: { 'levels.proven.configs.$': newData }}
    )
    


    1. モンゴイドハッシュフィールドのクエリ

    2. MongoDBコレクションからすべてのアイテムを削除する方法

    3. MongoDb合計クエリ

    4. Java用の最高のRedisライブラリ