如何使用MongoDB Java驱动程序更新数组中的对象?

你好,我有这份文件

{
  email: "email@gmail.com",list: [
    {
      "product": "Car","price": 18
    },{
      "product": "Boat","price": 20 
    }
  ]
}

我想知道如何使用email参数识别文档并通过找到 product 来更新list参数中的特定对象使用“汽车”参数,并使用MongoDB Java驱动程序将 价格 更新为15。

谢谢

wxcool87 回答:如何使用MongoDB Java驱动程序更新数组中的对象?

有两种方法可以根据条件更新数组字段的嵌套文档。

(1)使用位置$运算符更新:

positional $ operator充当与查询文档匹配的第一个元素的占位符,并且数组字段必须显示为查询文档的一部分;即"list.product": "Car"。而且,第二,只有第一个匹配的数组元素将被更新。

db.collection.updateOne( 
  { email: "email@gmail.com","list.product": "Car" },{ $set: { "list.$.price": 15 } } 
)

(2)使用过滤的位置$ [identifier]运算符进行更新:

filtered positional operator $[identifier]标识与arrayFilters条件匹配的数组元素以进行更新操作。

请注意,在使用$[identifier]更新运算符时,不需要在数组字段上指定条件。然后,所有匹配的数组元素("product": "Car")将被更新。

db.collection.updateOne( 
  { email: "email@gmail.com" },{ $set: { "list.$[ele].price": 15 } },{ arrayFilters: [ { "ele.product": "Car" } ] }
)


使用MongoDB Java驱动程序更新:

案例1:

Bson filter = and(eq("email","email@gmail.com"),eq("list.product","Car"));
Bson update = set("list.$.price",15);
UpdateResult result = coll.updateOne(filter,update);

案例2:

Bson filter = eq("email","email@gmail.com");
UpdateOptions options = new UpdateOptions()
                              .arrayFilters(asList(eq("ele.product","Car")));
Bson update = set("list.$[ele].price",update,options);

参考: MongoDB Java Driver

本文链接:https://www.f2er.com/2343721.html

大家都在问