我在Mongo数据库中有大量文档,结构如下:
{
"_id" : {
"birthDate" : "1978-08-09",
"name" : "Peter"
},
"value" : {
"types" : {
"euro" : 90,
"unknown" : 2,
"dollar" : 3
}
}
}
并非所有文件都包含所有类型(例如:其中一些只有euro
或没有unknown
字段。
我想用聚合框架计算特定名称的每个type
的出现次数。
我有这个:
db.collection.aggregate({$match: {_id : {name:"John"}}}, {$group: {_id: '', euro: {$sum: '$value.types.euro'}, dollar: {$sum: '$value.types.dollar'}, unknown: {$sum: '$value.types.unknown'}}})
但它正在回归:
{ "result" : [ ], "ok" : 1 }
我的问题是:如何使用Mongo的聚合框架计算特定type
的每个coin
的{{1}}?是否也可以获得表单中每个名称的列表:
name
我正在使用MongoDB和Java驱动程序,所以如果答案是用Java代码,那将是完美的。
答案 0 :(得分:3)
您可以使用以下查询按名称分组&数硬币:
db.collection.aggregate(
{$group : {_id : "$_id.name",
dollar : {$sum : "$value.types.dollar"},
euro : {$sum : "$value.types.euro"},
unknown : {$sum : "$value.types.unknown"}}}
)
此外,如果您想查找特定人物的硬币数量,您可以使用以下查询:
db.collection.aggregate(
{$match : {"_id.name" : "John"}},
{$group : {_id : "$_id.name",
dollar : {$sum : "$value.types.dollar"},
euro : {$sum : "$value.types.euro"},
unknown : {$sum : "$value.types.unknown"}}}
)
答案 1 :(得分:1)
要计算特定type
的每个coin
的{{1}},您可以这样做:
name