这是一个关于在数组中添加一系列数据的最佳方法的问题,我必须匹配另一个元素.我正在尝试使用2.2聚合框架,我可以通过一个简单的组来实现这一点.
所以对于给定的一组文档,我试图获得这样的输出;
{
"result" : [
{
"_id" : null,
"numberOf": 2,
"Sales" : 468000,
"profit" : 246246,
}
],
"ok" : 1
}
Run Code Online (Sandbox Code Playgroud)
现在,我最初有一个文档列表,包含分配给命名属性的值,例如;
[
{
_id : 1,
finance: {
sales: 234000,
profit: 123123,
}
}
,
{
_id : 2,
finance: {
sales: 234000,
profit: 123123,
}
}
]
Run Code Online (Sandbox Code Playgroud)
这很容易加起来,但由于其他原因,结构不起作用.例如,可能有其他列,如"财务",我希望能够索引它们而不创建数千个索引,所以我需要转换为这样的结构;
[
{
_id : 1,
finance: [
{
"k": "sales",
"v": {
"description":"sales over the year",
v: 234000,
}
},
{
"k": "profit",
"v": {
"description":"money made …Run Code Online (Sandbox Code Playgroud) 我在MongoDB中使用db.collection.aggregate时出现问题.
我有一个数据结构,如:
_id:...
Segment:{
"S1":1,
"S2":5,
...
"Sn":10
}
Run Code Online (Sandbox Code Playgroud)
它意味着以下内容Segment:我可能有几个具有数值的子属性.我想把它们总结为1 + 5 + .. + 10
问题是:我不确定子属性名称,因为每个文档的段号都不同.所以我无法列出每个细分名称.我只是想使用类似for循环的东西来将所有值加在一起.
我试过像这样的查询:
db.collection.aggregate([
{$group:{
_id:"$Account",
total:{$sum:"$Segment.$"}
])
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
在不事先掌握所有指标的情况下,如何计算以下指标的总和?我可以使用聚合框架或MapReduce完成此操作吗?
[
{
player_id: '123',
timestamp: <sometime>,
metrics: {
points_per_game: 1,
rebounds_per_game: 2,
assist_per_game: 3,
}
},
{
player_id: '123',
timestamp: <sometime>,
metrics: {
points_per_game: 1,
rebounds_per_game: 2,
}
},
{
player_id: '345',
timestamp: <sometime>,
metrics: {
points_per_game: 1,
rebounds_per_game: 2,
point_in_the_paint_per_game: 2
}
}
]
Run Code Online (Sandbox Code Playgroud)
我想得到以下结果
[
{
player_id: '123',
metrics: {
points_per_game: 2,
rebounds_per_game: 4,
assist_per_game: 3,
}
},
{
player_id: '345',
metrics: {
points_per_game: 1,
rebounds_per_game: 2,
point_in_the_paint_per_game: 2
}
}
]
Run Code Online (Sandbox Code Playgroud)
我无法执行以下操作,因为这将要求我了解每个指标:
db.stats.aggregate([
{$group: {
_id: …Run Code Online (Sandbox Code Playgroud)