Jes*_*ish 9 mongodb mongodb-query
我有一组文档,其值已知为数字,但存储为字符串.更改字段的类型是我无法控制的,但我想在聚合中使用该字段(例如,对其进行平均).
似乎我应该在分组之前使用投影,并且在该投影中根据需要转换字段.我似乎无法正确地得到语法 - 我尝试的一切都给了我NaN,或者在聚合的下一步中简单地丢失了新字段.
$project: {
value: '$value',
valueasnumber: ????
}
Run Code Online (Sandbox Code Playgroud)
鉴于上面的一个非常简单的例子,其中所有文档中$ value的内容都是字符串类型,但是将解析为一个数字,我该怎么做使valueasnumber一个新的(不存在的)字段,其类型为double,并且已解析它的价值是多少?
我尝试过类似下面的例子(以及大约十几个类似的东西):
{ $add: new Number('$value').valueOf() }
new Number('$value').valueOf()
Run Code Online (Sandbox Code Playgroud)
我完全吠叫了错误的树吗?任何帮助将不胜感激!
(要100%清楚,下面是我想要使用新字段的方式).
$group {
score: {
$avg: '$valueasnumber'
}
}
Run Code Online (Sandbox Code Playgroud)
我能想到的方法之一是使用 mongo shell javascript 通过在现有文档或新文档中添加新的数字字段、valuesasnumber(现有字符串“值”字段的数字转换)来修改文档。然后使用该数字字段进行进一步计算。
db.numbertest.find().forEach(function(doc) {
doc.valueasnumber = new NumberInt(doc.value);
db.numbertest.save(doc);
});
Run Code Online (Sandbox Code Playgroud)
使用 valueasnumber 字段进行数值计算
db.numbertest.aggregate([{$group :
{_id : null,
"score" : {$avg : "$valueasnumber"}
}
}]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16314 次 |
| 最近记录: |