在mongodb中的数组数组内的文档的更新字段

我有一个Document,它有一个名为listsofItems的数组字段。其内容为Documents,它们都包含另一个名为setOfItems的数组字段,该字段由Document组成。
因此结构类似于 listsofItemsDocuments的数组)> setOfItemsDocuments的数组)> ItemsDocuments

Document 中的每个listsofItems都有一个 listId 字段,用于唯一标识其内容。
Document 中的每个setOfItems都有一个 itemId 字段,用于唯一标识其内容。

在给定 Document 的情况下,我想更改 setOfItems listId内字段的值itemId
目前,我正在尝试这样做:

final var filter = Filters.and(Filters.eq("accessDetail.email",email),Filters.eq("listsofItems.listId",listId),Filters.eq("listsofItems.$.setOfItems.itemId",itemId));
final var updateQuery = Updates.set("listsofItems.$.setOfItems.obtained",BsonBoolean.TRUE);

usersCollection.findOneAndUpdate(filter,updateQuery)  

查询与任何Document不匹配
我无法通过按索引直接访问 setOfItems 中的元素,因为它们是由其他索引而不是根据它们的itemId字段排序的。

在特定条件下执行更新的正确查询是什么?

EDIT1
我将filter替换为:

 final var filter = Filters.and(Filters.eq("accessDetail.email",Filters.elemMatch("listsofItems",Filters.eq("listId",listId)),Filters.elemMatch("listsofItems.setOfItems",Filters.eq("itemId",itemId)));

现在,我收到错误消息:“无法创建字段'获得” 以及应该对其进行更改的正确子文档。
问题归结为updateQuery

chen123321bin 回答:在mongodb中的数组数组内的文档的更新字段

为此,您需要使用arrayFilters。

Document filter = new Document("base-doc-field","<value>");//query for base doc 
   //fields if any

Document updateDoc = new Document("$inc",new Document("listOfItems.$[elem].setOfItems.$[elem1].fieldName","value to  
        update"));


 //prepare array filters.
  List<Bson> arrayFilters = new ArrayList<>();
  arrayFilters.add(new Document("elem.listId","<list_id>"));
  arrayFilters.add(new Document("elem1.itemId","<item_id>"));

 //prepare update options,and set these array filters to update options.
 UpdateOptions options = new UpdateOptions().
                  arrayFilters(filterArr).bypassDocumentValidation(true);

 //execute update method.
 collection.updateOne(filter,updateDoc,options);

访问https://docs.mongodb.com/manual/reference/operator/update/positional-filtered/#update-nested-arrays-in-conjunction-with

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

大家都在问