MongoDB如何使用Java驱动程序计算数组元素

时间:2018-08-08 18:09:40

标签: java arrays mongodb

我需要我的应用程序使用Java驱动程序3.8计算文档内的数组foos的大小。我知道我可以用外壳做到这一点

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 个答案:

答案 0 :(得分:1)

没有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));

答案 1 :(得分:0)

您可以创建一个新字段,并将数组的大小放入其中,并将其用于计数或排序。

使用“ addFields” java帮助器

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

哪里

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