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

8 浏览
0 Comments

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

我正在尝试更新mongodb文档中包含在数组中的单个子元素。我想使用数组索引引用字段(数组中的元素没有任何可以保证是唯一标识符的字段)。看起来应该很容易做到,但我无法找出语法。\n以下是我想在伪json中做的事情。\n在更新前:\n

{
  _id : ...,
  other_stuff ... ,
  my_array : [
    { ... 旧内容A ... },
    { ... 旧内容B ... },
    { ... 旧内容C ... }
  ]
}

\n更新后:\n

{
  _id : ...,
  other_stuff ... ,
  my_array : [
    { ... 旧内容A ... },
    { ... 新内容B ... },
    { ... 旧内容C ... }
  ]
}

\n查询应该是这样的:\n

//伪代码
db.my_collection.update(
  {_id: ObjectId(document_id), my_array.1 : 1 },
  {my_array.$.content: 新内容B }
)

\n但是这行不通。我已经花了很长时间搜索mongodb文档,并尝试不同的变体(例如使用$slice等)的语法。我找不到任何清晰的解释如何在MongoDB中完成这种更新。

0
0 Comments

在MongoDB中,如果我们想要更新数组中的一个子元素,可以使用'$'位置操作符。下面是一个使用该操作符的示例代码:

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

该代码中,我们通过指定`_id`和`my_array.1`来定位到数组中需要更新的子元素。然后,我们使用`$set`操作符来更新该子元素的内容为"NEW content B"。

要详细了解'$'位置操作符的用法,可以查看[这个链接](http://docs.mongodb.org/manual/reference/operator/update/positional/?_ga=1.12567092.1864968360.1429722620#up._S_)。

通过使用'$'位置操作符,我们可以方便地在MongoDB中更新数组中的子元素。

0
0 Comments

我们在Mongo Shell中可以通过直接指定索引值来更新数组中的元素。例如,如果我们知道要更新的元素的索引是1,可以使用以下代码:

db.my_collection.update(
    {_id : "document_id"},
    {$set : {"my_array.1.content" : "New content B"}}
)

但是,如果我们不知道要更新的元素的索引怎么办呢?在这种情况下,我们可以使用$elemMatch运算符来查找满足特定条件的元素,并更新该元素的值。

下面是一个示例代码,演示了如何使用$elemMatch来更新数组中的单个子元素:

db.my_collection.update(
    {_id: "document_id", my_array: {$elemMatch: {content: "Old content"}}},
    {$set: {"my_array.$.content": "New content"}}
)

在上述代码中,我们使用$elemMatch运算符来查找具有特定内容的元素。然后,我们使用$符号来引用匹配的元素,并更新其内容。

在MongoDB中,要更新数组中的单个子元素,我们可以通过直接指定索引值或使用$elemMatch运算符来查找和更新满足特定条件的元素。通过这两种方法,我们可以根据需要灵活地进行更新操作。

0
0 Comments

问题的出现的原因:原回答给出的解决方法创建了一个同名的对象,而不是更新数组中的元素。

解决方法:参考MongoDB官方文档,使用操作符"$set"和"$"来更新数组中的单个元素。

0