当前位置: 首页 > 知识库问答 >
问题:

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

宗建章
2023-03-14

我正在尝试更新mongob文档中数组中包含的单个子元素。我想使用其数组索引引用该字段(数组中的元素没有任何我可以保证将是唯一标识符的字段)。似乎这应该很容易做到,但我无法弄清楚语法。

这是我想在伪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中完成这种更新的明确解释。

共有3个答案

韩高峯
2023-03-14

在mongo样式中,使用“$”位置运算符。有关详细信息,请查看此链接。

db.my_collection.update(
  {_id: ObjectId(document_id), my_array.1 : 1 },
  { $set: { "my_array.$.content" : "NEW content B" } }
)
郑锋
2023-03-14

Mongo Shell中索引(例如1)引用的数组元素的更新也可以通过直接指示索引值来完成:

db.my_collection.update(
    {_id : "document_id"},
    {$set : {"my_array.1.content" : "New content B"}}
)
梁丘俊材
2023-03-14

正如所料,一旦您知道如何进行,查询就很容易了。以下是python中的语法:

db["my_collection"].update(
    { "_id": ObjectId(document_id) },
    { "$set": { 'documents.'+str(doc_index)+'.content' : new_content_B}}
)
 类似资料:
  • 我有一个以下格式的mongodb文档。如何基于父属性_id更新数组中第一个元素的rolename字段。

  • 此请求不使用2D数组。考虑以下结构的1D数组,其中索引从零开始,长度从一开始: 节0是单个单元格的数组。 第1节 null null null null 到目前为止,我使用一个语句的公式只能获得第一节(不是第2节或第3节)。希望找到一组公式来实现目标,而不使用语句或循环。以下是我目前掌握的信息:

  • 问题内容: 在Python中,我们可以使用来获取数组中值的索引。 但是,当我尝试执行NumPy数组时: 我得到: AttributeError:“ numpy.ndarray”对象没有属性“ index” 我如何在NumPy数组上执行此操作? 问题答案: 使用来获得,其中一个给定的条件是指数。 例子: 对于称为的2D : 对于一维数组: 请注意,这也适用于像条件,,等等… 您也可以使用方法创建的子

  • 我已经创建了一个的数组: 我的问题是现在如何访问其中一个数组的元素。例如,我可以通过以下方式访问(或在示例打印中)整个数组元素: 但是如何访问所拥有的数组中的第一个元素呢?我尝试了所有方法,比如,但当数组是链接列表的元素时,我不知道如何访问数组中的元素。

  • 问题内容: 我在数组上遇到了麻烦。我有一个要修改的数组,如下所示。我想通过索引删除它的元素(元素),然后重新索引数组。可能吗? 问题答案:

  • 问题内容: 我正在寻找在Java中找到给定元素的索引,并知道其内容的方法。 我尝试了以下示例,该示例不起作用: 谁能解释这个问题是什么以及我需要做些什么来解决它? 问题答案: 在这种情况下,你可以从字符数组中创建一个新的String,然后对该字符串执行indeoxOf(“ e”): 但是在其他原始数据类型的情况下,你必须对其进行迭代。