Java 从集合的所有文档获取数组列表元素的总数

Java 从集合的所有文档获取数组列表元素的总数,java,mongodb,Java,Mongodb,我正在尝试获取我的用户的活动,其中我正在尝试获取userinfo表中所有用户的总追随者和追随者 我正在使用下面的命令行查询来获得运行良好的结果,并获得总计数 db.userinfo.aggregate([ { "$group": { "_id": null, "followersCount": { "$sum": { "$size": { $ifNull: [ "$followers", [] ] } } },

我正在尝试获取我的用户的活动,其中我正在尝试获取userinfo表中所有用户的总追随者和追随者

我正在使用下面的命令行查询来获得运行良好的结果,并获得总计数

db.userinfo.aggregate([
{ "$group": {
    "_id": null,
    "followersCount": {
        "$sum": {
            "$size": { $ifNull: [ "$followers", [] ] }
        }
    },
    "followingCount": {
        "$sum": {
            "$size": { $ifNull: [ "$i_am_following", [] ] }
        }
    }
}}
])
但我无法使用java编程复制这一点。我们可以用java使用BasicDBObjects编写这个查询吗?或者有其他方法可以做到这一点吗

以下是单个用户的示例数据

db.userinfo.insert (
{  
"username" : "user1",
"useremail" : "user1@gmail.com", 
"password" : "password",
"firstname" : "firstname", 
"lastname" : "lastname", 
"dob" : "24-05-1992",
"followers" : [
    {
        "user" : "user2", 
        "from_date" : "2016-12-15 09:59:04"
    },
    {
        "user" : "user3", 
        "from_date" : "2016-12-15 08:59:04"
    }
], 
"i_am_following" : [
    {
        "user" : "user2", 
        "from_date" : "2016-12-15 08:59:04"
    },
    {
        "user" : "user3", 
        "from_date" : "2016-12-15 09:59:04"
    }
]
})

你可以试试这样的

import static com.mongodb.client.model.Accumulators.*;
import static com.mongodb.client.model.Aggregates.*;
import static com.mongodb.client.model.Projections.computed;
import static java.util.Arrays.asList;
import static java.util.Collections.EMPTY_LIST;

Bson group = group(null,
    sum("followersCount", computed("$size",
        computed("$ifNull",
            asList("$followers", EMPTY_LIST)))),
    sum("followingCount", computed("$size",
        computed("$ifNull",
            asList("$i_am_following", EMPTY_LIST))))
);

AggregateIterable <Document> output = userinfo.aggregate(asList(group));
导入静态com.mongodb.client.model.累加器。*;
导入静态com.mongodb.client.model.Aggregates.*;
导入静态com.mongodb.client.model.Projections.computed;
导入静态java.util.Arrays.asList;
导入静态java.util.Collections.EMPTY_列表;
Bson组=组(空,
总和(“followersCount”,计算得出($size),
已计算($ifNull),
asList(“$followers”,空列表)),
总和(“以下计数”,计算得出($size),
已计算($ifNull),
asList($i_am_following),空列表)
);
AggregateItableOutput=userinfo.aggregate(asList(group));

向我们展示迄今为止您尝试的内容BasicDBObject groupFields=new BasicDBObject(“\u id”,null);groupFields.put(“heartCount”、新BasicDBObject($sum)、新BasicDBObject($size)、新BasicDBObject($ifNull)、Arrays.asList($hearts)、新ArrayList());BasicDBObject group=新的BasicDBObject(“$group”,groupFields);我尝试了很多不同的方法,但最终结果是无效的。考虑添加一些样本doc.@ Salava与您的数据验证。您应该做得很好。我得到com.mongodb.MongoCommandException:命令失败,错误为168:“当我尝试上述代码时,无法识别的表达式“$followers”。我使用的是3.4.1版本。我在示例文档中得到了这个响应
{u id=null,followersCount=2,followersCount=2}
。我以前使用过3.4.0,现在我将版本更改为3.4.1,但仍然得到了相同的错误。我可以清楚地看到您得到了正确的输出,我认为我缺少了一些东西来实现这一点。我将附上问题中错误的屏幕截图。您没有使用答案中的更新代码。昨天,我更新了代码以删除
新文档
部分。