【发布时间】:2016-02-03 09:11:12
【问题描述】:
我正在学习 MongoDB 并尝试对集合进行分组。 我正在寻找的是按年份分组,获取最大“平均注释”字段并显示与此平均值相关的文档的字段主名称
例如,如果我有:
Name | Average | Year
Name_01 | 7.56 | 1995
Name_02 | 8.96 | 1995
Name_03 | 3.25 | 2005
Name_04 | 4.36 | 2005
Name_05 | 7.52 | 2020
我需要:
Name | Average | Year
Name_02 | 8.96 | 1995
Name_05 | 7.52 | 2020
Name_04 | 4.36 | 2005
我已经完成了分组和最大值。这是我的代码:
db.foobar.aggregate([
{
$group: { _id: '$year_published', max: { $max: '$statistics.average' }}
},
{
$project: { _id: 1, max: 1 }
},
{
$sort: { max: -1 }
}
])
这给了我这样的结果:
{
"result" : [
{
"_id" : 1999,
"max" : 8.0343000000000000
},
{
"_id" : 1985,
"max" : 7.8833299999999999
}
// An so on...
}
但我还想将与“max”相关的文档的主要名称投影为:
{
"result" : [
{
"_id" : 1999,
"max" : 8.0343000000000000,
"name": "Foo Bar"
},
{
"_id" : 1985,
"max" : 7.8833299999999999,
"name": "Lorem Ipsum"
}
// An so on...
}
NB:问题的下一部分增加了名称的复杂性(因为我的文档结构)。这不是我现在主要关心的问题,但我将其添加到问题中以反映我的所有问题。
主要名称有点难以获得。对于每个文档,我都有一个这样的对象数组:
{
"names" : [
{
"type" : "primary",
"value" : "Foo bar"
},
{
"type" : "alternate",
"value" : "Foo foo"
},
{
"type" : "alternate",
"value" : "Bar bar"
}
]
}
我想要得到的是具有“主要”类型的名称(即我的示例中的“Foo bar”)。
这是我的文档的结构:
{
"_id" : ObjectId("56338f2bdc99b8ec22a43328"),
"names" : [
{
"type" : "primary",
"value" : "Foo bar"
},
{
"type" : "alternate",
"value" : "Barr foo"
}
],
"year_published" : 1992
"statistics" : {
"average" : 6.6057699999999997
}
}
我想我还没有到这一步,但我不知道该怎么做...你能帮帮我吗?
【问题讨论】:
-
如果您需要帮助,您需要展示您最初拥有的数据以及您需要从中获得什么。否则只是猜测。
-
@BlakesSeven 我在乞讨时添加了一个示例以及我的文档结构。
-
@user3100115 我不同意,因为这不是单点课程,问题还有其他部分。指向零件的副本并不能解决其他零件。
-
@BlakesSeven 好点。
-
@user3100115 我的指针(和个人偏好),如果我看到一个不完全“清楚”的问题,我会将其标记为结束。我认为这在很大程度上是对 OP 提问的一种保护,因为无论如何,不清楚的问题大多会得到答案(大多是错误的和不正确的)。因此,还为澄清点留下了评论,并且 OP 有责任明确他们的观点。如果他们这样做(在任何时候),那么我撤回/投票重新开放,因为 OP 已经表明了他们的观点。这同样适用于“部分”重复,或者 OP 不理解标记的重复。保护和解决是目标
标签: mongodb mongodb-query aggregation-framework