1. ホーム
  2. arrays

[解決済み] MongoDB: 配列内のインデックスで参照されるサブ要素を更新するには?

2023-01-20 13:28:50

質問

mongodb ドキュメント内の配列に含まれる単一のサブ要素を更新しようとしています。私はその配列インデックスを使用してフィールドを参照したい(配列内の要素は、私が一意の識別子であることを保証できるフィールドを持っていない)。これは簡単にできるように思えますが、構文がわかりません。

以下は、私が擬似jsonで行いたいことです。

ビフォーです。

{
  _id : ...,
  other_stuff ... ,
  my_array : [
    { ... old content A ... },
    { ... old content B ... },
    { ... old content C ... }
  ]
}

後です。

{
  _id : ...,
  other_stuff ... ,
  my_array : [
    { ... old content A ... },
    { ... NEW content B ... },
    { ... old content C ... }
  ]
}

クエリはこんな感じでいいみたいです。

//pseudocode
db.my_collection.update(
  {_id: ObjectId(document_id), my_array.1 : 1 },
  {my_array.$.content: NEW content B }
)

しかし、これはうまくいきません。mongodbのドキュメントを検索し、この構文のさまざまなバリエーションを試すのにあまりにも長い時間を費やしてきました(たとえば $slice を使うなど)。MongoDB でこの種の更新を行う方法について、明確な説明を見つけることができません。

どのように解決するのですか?

予想通り、一度方法を知ってしまえば、クエリは簡単です。 Pythonのシンタックスです。

db["my_collection"].update(
    { "_id": ObjectId(document_id) },
    { "$set": { 'documents.'+str(doc_index)+'.content' : new_content_B}}
)