arrays - MongoDB:如何更新数组中的单个子元素,由数组中的索引引用?

我正在尝试更新 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}}
)

https://stackoverflow.com/questions/11372065/

相关文章:

mongodb - meteor :如何备份我的 mongo 数据库

mongodb - 查询 MongoDB 的 IDE?

mongodb - 仅返回嵌套数组中匹配的子文档元素

node.js - 创建后如何在 mongoose 中填充子文档?

mongodb - 如何从 find 方法返回 Mongoose 结果?

mongodb - 大型项目的 NodeJS vs Play 框架

shell - 如何从 Mongo ObjectID 中提取创建日期

mongodb - Mongoose:深人口(填充人口密集的领域)

mongodb - 如何使用 docker-compose 为 mongo 数据库播种?

python - 在 Meteor 运行时,如何从另一个客户端访问 Meteor 的 MongoDB