使用Java驱动程序计算MongoDB数组元素的数量

3

我需要使用Java驱动程序3.8来计算文档中数组foos的大小。我知道可以在shell中完成此操作。

db.collection.aggregate(
   [
      {
         $match: { _id: 123456789 }
      },
      {
         $project: {
            count: { $size: "$foos" }
         }
      }
   ]
)

但是我不知道如何使用Java实现这一点,因为我找到的唯一一个产生$size操作符的方法是Filters.size(String fieldName, int size),它的作用是查找数组fieldName大小为size的文档。我在com.mongodb.client.model包中进行了搜索,但没有找到任何可以回答我的问题的内容。

2个回答

5

在Java驱动程序中,没有帮助聚合表达式的助手来帮助处理$project阶段。

尝试:

Bson match = new Document("$match", Filters.eq("_id", 123456789 ));
Bson projection = new Document("$size", "$foos" );
Bson project = Aggregates.project(new Document("count", projection) );
collection.aggregate(Arrays.asList(match, project));

0

你可以创建一个新的字段,并将数组的大小放在其中,然后用它来进行计数或排序。

使用 "addFields" Java 助手

addFields(new Field("productsCount",
            new Document("$size", "$products")));

在哪里

  1. 'productsCount' 是新字段的名称
  2. 'products' 是数组
  3. '$size' 是 MongoDB 聚合操作。

然后你必须维护这个字段。保存计算几乎从来都不是一个好主意(长时间计算是个例外)。最好在内存中进行计算。 - Michael

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接