mik*_*ana 5 mongodb aggregation-framework
我正在使用MongoDB的Aggregate Framework.我的每个文档中都有一个现有字段:
time: Date
Run Code Online (Sandbox Code Playgroud)
我希望timeBlock基于一个简单的函数创建一个新的领域:
var dateToTimeBlock = function(dateString, timeBlock){
return new Date(dateString).valueOf() / timeBlock
}
Run Code Online (Sandbox Code Playgroud)
据我所知,$组可以添加字段,但用于计算这些领域的功能似乎被内置到蒙戈,如$avg,$add等是否有可能生成基于任意字段计算值?
使用聚合运算符是使用MongoDB聚合计算字段的唯一方法.如果要使用本机JavaScript函数(如valueOfon Date对象),则必须使用Map-Reduce.
虽然聚合框架不如Map-Reduce灵活,但在大多数情况下它会明显更快.
如果性能对此操作至关重要,如果可能,我建议您预先计算这些字段并进行查询.
为了您的示例,为了简化聚合框架中的操作,我将Date转换为整数或在文档中添加一个整数的新字段(我会在其他用例中看到更合适的).然后你可以轻松地用$ divide进行计算.
db.coll.aggregate([
{ $project : { dateToTime: { $divide : [ "$timeInt", timeBlock ] }}}
]);
Run Code Online (Sandbox Code Playgroud)
或者,如果timeBlock是同一文档中的字段,您可以这样做:
db.coll.aggregate([
{ $project : { dateToTime: { $divide : [ "$timeInt", "$timeBlock" ] }}}
]);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5980 次 |
| 最近记录: |