如何使用 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);
}
我想计算 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);
}