In my mongodb database,there is only one document below:
{
"_id" : ObjectId("5226efc5ccf23796f9590f67"),
"count" : NumberLong(126045),
"eissn" : "1466-5034",
"grade" : 0.0,
"issn" : "1466-5026",
"journalAlias" : ["International journal of systematic and evolutionary microbiology", "Int J Syst Evol Microbiol", "Int. J. Syst. Evol. Microbiol."],
"journalName" : "International journal of systematic and evolutionary microbiology",
"ccNameCount" : [{
"ccName" : "ATCC",
"paperCount" : 1,
"strainCount" : 2
}, {
"ccName" : "ATCC",
"paperCount" : 3,
"strainCount" : 4
}, {
"ccName" : "BCCM/DCG",
"paperCount" : 5,
"strainCount" : 6
}, {
"ccName" : "BCCM/IHEM",
"paperCount" : 0,
"strainCount" : 0
}
}
Run Code Online (Sandbox Code Playgroud)
我想要的是找出有多少不同的 ccNameCout.paperCount 其 ccName 是“ATCC”。所以,在我的 java 代码中,我是这样写的:
coll.distinct("ccNameCount.paperCount",new BasicDBObject("ccNameCount.ccName","ATCC"))
,
但结果是4
, 而不是2
。
我知道distinct的过程。首先,它搜索ccNameCount.ccName为“ATCC”的集合,然后,它会在这些找到的文档中做一个distinct()。
但我需要的是找到多少个不同的 paperCount,其 ccName 是“ATCC”。任何人都可以帮助我吗?
我相信实现这一目标的最佳方法是使用聚合框架:
db.collection.aggregate(
{$unwind : "$ccNameCount"},
{$match : {
"ccNameCount.ccName" : "ATCC"
}},
{$group: {
_id : "$ccNameCount.paperCount"
}},
{$group: {
_id : "count",
total : {"$sum" : 1}
}}
);
Run Code Online (Sandbox Code Playgroud)
这将为您提供结果总计字段中 ccName="ATCC" 的 paperCount 的不同计数。
此外,如果您需要知道除总计数之外的每个不同值,您可以使用$addToSet运算符:
db.collection.aggregate(
{$unwind : "$ccNameCount"},
{$match : {
"ccNameCount.ccName" : "ATCC"
}},
{$group: {
_id : "$ccNameCount.paperCount"
}},
{$group: {
_id : "count",
total : {"$sum" : 1},
distinctValues : {$addToSet : "$_id"}
}}
);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
13416 次 |
最近记录: |