在Java中获取Mongodb集合的字段总数

j91ykkif  于 2022-11-03  发布在  Go
关注(0)|答案(1)|浏览(263)

对于普通的Mongodb查询,我可以找到答案(想想?),但是对于Java的这个特定用例,我什么都找不到...
我有一个类型化为以下对象的集合:

public class TestObj {
    ObjectId id;
    long value = 0;
    // etc
}

我想得到集合中所有对象的value字段的和。我该怎么做?
我目前的问题是,无论我做什么,集合中的聚合方法都返回TestObj类型,而不是一个更通用的对象,我已经尝试了project,但似乎没有任何效果。
当前代码:

public long getTotalValue(){
        Object returned = this.getCollection().aggregate(
            List.of(
                Aggregates.group(null, Accumulators.sum("$value", 1))
            )
        );
        //TODO:: get sum
        return 0L;
    }
o7jaxewo

o7jaxewo1#

如果要计算有多少集合具有value字段,可以在聚合中使用count。
但是,如果您希望得到集合中value字段的值的总和,则可以使用mongoDb聚合进行如下计算

Arrays.asList(new Document("$group", 
   new Document("_id", 
   new BsonNull())
        .append("value", 
   new Document("$sum", "$value"))))

value是集合中字段的名称。
完整示例:

Document returned = this.getCollection().aggregate(
    List.of(new Document(
        "$group",
        new Document(
            "_id",
            new BsonNull()
        )
            .append(
                "value",
                new Document("$sum", "$numExpired")
            )
    )),
    Document.class
).first();

return returned.getLong("value");

相关问题