如何使用 count() 来获取文档中数组条目的数量?

How can be count() used to get the number of array entries in document.?

我想计算 type="User.Notice" 中子文档的数量。我的数据库如下。

我写了以下查询,但它总是返回 1 或 0。它可能有什么问题。

long countss = eventlist.count(new BasicDBObject("192_168_10_17.type", new BasicDBObject("$eq", "User.Notice")));
System.out.println(countss); 

更新:

如何获取特定数组下的所有记录。我想要数组`192_168_10_17 下的所有文档。你能推荐一个方法吗?

首先你应该放松 192_168_10_17 并使用 mongo 聚合如下

db.collectionName.aggregate({
"$unwind": "2_168_10_17"
}, {
"$match": {
    "192_168_10_17.type": "User.Notice"
}
}, {
"$group": {
    "_id": "2_168_10_17.type",
    "count": {
        "$sum": 1
    }
}
}, {
"$project": {
    "_id": 0,
    "count": "$count"
}
})

以上查询 return 所有匹配 User.Notice 计数。现在使用 mongo java aggregation 在 java 中转换此查询。我尝试遵循 java 代码如下

// unwind 192_168_10_17
DBObject unwind = new BasicDBObject("$unwind", "2_168_10_17");
// create  pipeline operations, with the $match
DBObject match = new BasicDBObject("$match",new BasicDBObject("192_168_10_17.type", "User.Notice"));
// Now the $group operation
 DBObject groupFields = new BasicDBObject("_id", "2_168_10_17.type");
groupFields.put("count", new BasicDBObject("$sum", 1));
DBObject group = new BasicDBObject("$group", groupFields);
// build the $projection operation
DBObject fields = new BasicDBObject("_id", 0);
fields.put("count", "$count");
DBObject project = new BasicDBObject("$project", fields);
// run aggregation
List < DBObject > pipeline = Arrays.asList(match, group, project);
 AggregationOutput output = collectionName.aggregate(pipeline);
for (DBObject result: output.results()) {
 System.out.println(result);
}