Spring 数据 mongodb 按列表聚合过滤

Spring data mongodb aggregation filter by list

我按照这个问题 中的示例在 spring 数据 mongodb 的聚合中创建过滤器。在示例中,过滤器搜索 valueOfequalToValue 以创建 $eq。我如何创建一个 $in 并传递一个列表?

这是我的代码:

ProjectionOperation p2 = project()
            .andExpression("name").as("name")
            .andExpression("version._id").as("version._id")
            .andExpression("version.version").as("version.version")
            .and(filter("version.cat")
                    .as("cat")
                    .by(valueOf("cat._id")
                            .equalToValue(new ObjectId("5de99f42f15273c92d1228e8"))))
            .as("version.cat");

我正在寻找这样的东西:

**ProjectionOperation p2 = project()
            .andExpression("name").as("name")
            .andExpression("version._id").as("version._id")
            .andExpression("version.version").as("version.version")
            .and(filter("version.cat")
                    .as("cat")
                    .by(new Criteria("cat")
                            .in(Arrays.asList(
                                    new ObjectId("5de99f42f15273c92d1228f7"),
                                    new ObjectId("5de99f42f15273c92d1228f9"))
                            )
                            .getCriteriaObject()
                    )).as("version.cat"));

感谢您的回答。

我可以使用 ArrayOperators 解决这个问题:

ProjectionOperation p2 = project()
            .andExpression("name").as("name")
            .andExpression("version._id").as("version._id")
            .andExpression("version.version").as("version.version")
            .and(filter("version.cat")
                    .as("cat")
                    .by(
                            ArrayOperators.In
                                    .arrayOf(Arrays.asList(
                                            new ObjectId("5de99f42f15273c92d1251853"),
                                            new ObjectId("5de99f42f15273c92d1251854"),
                                    )
                                    ).containsValue("$$cat._id")))
            .as("version.cat");

在 arrayOf 中,我传递了要与每个 objectId 的值进行比较的列表。我认为,过滤器使 'for' 中的一些 class 来获取 cat 列表的每个值。