Mongo Java驱动程序中的嵌套数组过滤

Mongo Java驱动程序中的嵌套数组过滤,java,mongodb,Java,Mongodb,以下NoSQL查询返回特定用户的所有评论: db.getCollection('catalog-review').aggregate([ { $project: { reviews: { $filter: { input: "$reviews", as: "review", cond: { $eq: [ "$$review.userId", 121 ] } }

以下NoSQL查询返回特定用户的所有评论:

db.getCollection('catalog-review').aggregate([
{
     $project: {
       reviews: {
         $filter: {
           input: "$reviews",
           as: "review",
           cond: { $eq: [ "$$review.userId", 121 ] }
          }
        }
      }
}
])
这是一个很好的查询,但是如果我使用Mongo驱动程序在Java中实现它,“$$”就不起作用了

List<CatalogReview> reviews = collection.aggregate(Arrays.asList(
            new Document("$project", new Document("reviews", new Document("$filter", new Document("input", "$reviews")
                    .append("as", "review").append("cond", new Document("$eq", Arrays.asList(new Document("$$review.userId", 121)))))))
    )).into(new ArrayList<>());

Mongo驱动程序是否支持聚合函数?

问题在于
数组.asList(新文档(“$$review.userId”,121))
。它应该是
Arrays.asList($$review.userId),121)

Arrays.asList(新文档(“$$review.userId”,121))
=
[{“$$review.userId”:121}]

Arrays.asList(“$$review.userId”,121)
=
[“$$review.userId”,121]

代码段应如下所示:

List<CatalogReview> reviews = collection.aggregate(Arrays.asList(
            new Document("$project", new Document("reviews", new Document("$filter", new Document("input", "$reviews")
                    .append("as", "review").append("cond", new Document("$eq", Arrays.asList("$$review.userId", 121))))))
    )).into(new ArrayList<>());
List reviews=collection.aggregate(Arrays.asList(
新文档($project),新文档(“审阅”,新文档($filter),新文档(“输入”,“审阅”)
.append(“as”,“review”).append(“cond”,新文档(“$eq”,Arrays.asList(“$$review.userId”,121‘‘‘‘‘‘‘‘‘)’))
)).into(新数组列表());

非常有魅力!非常感谢。
List<CatalogReview> reviews = collection.aggregate(Arrays.asList(
            new Document("$project", new Document("reviews", new Document("$filter", new Document("input", "$reviews")
                    .append("as", "review").append("cond", new Document("$eq", Arrays.asList("$$review.userId", 121))))))
    )).into(new ArrayList<>());