gpt4 book ai didi

mongodb - 复杂聚合命令MongoDB

转载 作者:可可西里 更新时间:2023-11-01 09:31:36 25 4
gpt4 key购买 nike

我在具有以下结构的 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 的聚合框架计算特定 name 的每个 cointype?是否也可以获取表单中每个名称的列表:

"result" : [
{
"name" : "Peter",
"dollar" : 1,
"euro" : 12,
"unknown" : 4

}
]

"result" : [
{
"name" : "John",
"dollar" : 4,
"euro" : 10,
"unknown" : 3

}
]

我正在使用带有 Java 驱动程序的 MongoDB,所以如果答案是用 Java 代码编写的,那就完美了。

最佳答案

您可以使用以下查询按名称分组并计数硬币:

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"}}}
)

关于mongodb - 复杂聚合命令MongoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20656351/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com