我需要计算数组对象的大小,还需要获取数组中每个标记为raised_amount
的字段的平均值。但是,MongoDB展开后不会让我计算数组的大小(duh)。在展开之前,Mongo不会让我计算数组大小。这是我要参加的课程。挑战很大。
db.research.aggregate({$unwind:"$funding_rounds"},
{"$group": {
"_id":{"name": "$name"},
"averageFunding" : {
"$avg" : "$funding_rounds.raised_amount"
}
}
},
{$project: { count: { $size:"$funding_rounds" }}},
{ $sort: { averageFunding: -1 } },
{"$limit":10})
取出{$project: { count: { $size:"$funding_rounds" }}}
即可使用!但是,我没有funding_round计数。尝试自己计算回合数,这是可行的。
数据示例:
{
"name": "Facebook",
"total_money_raised": "$39.8M",
"funding_round": [
{
"example": 123,
"round_code": "a",
"raised_amount": "1232"
},
{
"example": 123,
"round_code": "bat",
"raised_amount": "1232"
},
{
"example": 123,
"round_code": "cat",
"raised_amount": "1232"
}
]
}
关于在此聚合中如何计算数组大小的任何想法?
答案 0 :(得分:1)
$size需要一个数组,并且您$unwind个数组要在计数之前成为对象。这就是MongoDB限制计数大小的原因。
尝试以下代码:
<table>
<tr>
<th>Name</th>
<th>Age</th>
</tr>
<tr>
<td contenteditable="true" (blur)="update(data, 'name', $event)">{{data?.name}}</td>
<td contenteditable="true" (blur)="update(data, 'age', $event)">{{data?.age}}</td>
</tr>
</table>
Data: name[{{data?.name}}], age[{{data?.age}}]
输出:
@Component({
selector: 'my-app',
templateUrl: './app.component.html',
styleUrls: [ './app.component.css' ]
})
export class AppComponent {
public data = { name: null, age: null};
public update(data, prop, ev) {
data[prop] = ev.target.textContent; // <-- !!!
}
}
我还要在这里提及的另一件事是,如果您的db.getCollection('tests').aggregate([
{
$project: {
_id: 1,
name: 1,
total_money_raised : 1,
funding_round :1,
size: { $size:"$funding_round" }
}
},
{ $unwind : "$funding_round"},
{ $group:{
_id: "$name",
avgFunding : {"$avg" : "$funding_round.raised_amount"},
size: {$first : "$size"},
totalCount : {$sum: 1}
}
},
{ $sort: { "avgFunding": -1 } },
{ "$limit":10 }
])
字段是唯一的,而您只想拥有一个数组的大小,则可以/* 1 */
{
"_id" : "Facebook",
"avgFunding" : 1232.0,
"size" : 3,
"totalCount" : 3.0
}
然后计算name
时的文档总数,如下所示:
unwind
输出:
$group
大小为从数组中解开的文档总数。