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

Update field of a document inside an array of arrays in mongodb

我有一个 Document,它有一个名为 listsOfItems 的数组字段。它的内容是Documents,它们都包含另一个名为setOfItems的数组字段,它由Document.
组成 所以结构就像 listsOfItems(Documents 的数组) > setOfItems(Documents 的数组) > Items(Documents)

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

鉴于 listId[,我想更改 setOfItemsDocument 内字段的值=74=] 和 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", email),
                Filters.elemMatch("listsOfItems",
                        Filters.eq("listId", listId)),
                Filters.elemMatch("listsOfItems.setOfItems",
                        Filters.eq("itemId", itemId)));

现在我收到错误消息:'无法使用应在其中进行更改的正确子文档创建字段 'obtained'
问题归结为 updateQuery

为此,您需要使用 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