mongodb 根据同一数组中另一个元素满足的条件更新mongo集合中的数组元素

tkclm6bt  于 2023-03-17  发布在  Go
关注(0)|答案(2)|浏览(143)

下面是我的收藏。

{
'_id': ObjectId('603fd4575250717d17aba89e'),
'user_id': 19,
'items': [
{

'price': 5,
'id': '342566b0d5f14117a228d8b17f215c4a'
},

 {

 'price': 5,
 'id': '09e12c647fdf4c409e934eac23c73789'
}
],

  }

我需要更新价格的元素与id 09e12c647fdf4c409e934eac23c73789,它的当前值是5,我需要更新它为6,我可以知道查询相同的请。
我尝试了下面的查询,但没有成功。

a = db.sample_collection.update_one({"items.$.id": "09e12c647fdf4c409e934eac23c73789"}, 
{"$set": {"items.$price": 6}})

有人能帮助我正确的查询吗?

h43kikqp

h43kikqp1#

更新查询应如下所示:

a = db.sample_collection.update_one({"items.id": "09e12c647fdf4c409e934eac23c73789"}, { "$set": { "items.$.price": 6 }})

这是一个更新数组中文档的示例。执行更新时,位置运算符$应该只出现在更新文档中,而不是查询文档中。

2vuwiymt

2vuwiymt2#

应该使用$elemMatch查找数组索引,使用$运算符相应地更新该索引的数据

db.collection.updateOne(
    {"items":{ "$elemMatch":{"id":"09e12c647fdf4c409e934eac23c73789"} }},
    { $set: { "items.$.price": 6 } }
)

相关问题