首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >MongoDB聚合取代多次计算

MongoDB聚合取代多次计算
EN

Stack Overflow用户
提问于 2020-05-04 04:52:36
回答 1查看 43关注 0票数 3

我正在试着从我的收藏中获取avgBMI,maxBMI和maxBMI。

代码语言:javascript
运行
复制
var bmi =  db.people.aggregate(
    [   
        {
            $group:
            {
                _id: 1,
                avgBmi: {$avg: {$divide: [{$toDouble:"$weight"},{$pow: [{$divide:[{$toDouble:"$height"},100]},2]}]}},
                minBmi: {$min: {$divide: [{$toDouble:"$weight"},{$pow: [{$divide:[{$toDouble:"$height"},100]},2]}]}},
                maxBmi: {$max: {$divide: [{$toDouble:"$weight"},{$pow: [{$divide:[{$toDouble:"$height"},100]},2]}]}}
            }
        }
    ]
);

这是有效的,但它是令人讨厌的.

https://mongoplayground.net/p/LxJU8KmRzq2

如何替换计算过程才能停止计算3次?

EN

Stack Overflow用户

回答已采纳

发布于 2020-05-04 05:23:28

使用$project stage将操作分配给单个字段,然后在$group stage中使用该字段。

代码语言:javascript
运行
复制
db.people.aggregate([
  { "$project": {
    "cal": {
      "$divide": [
        { "$toDouble": "$weight" },
        { "$pow": [{ "$divide": [{ "$toDouble": "$height" }, 100] }, 2] }
      ]
    }
  }},
  { "$group": {
    "_id": 1,
    "avgBmi": { "$avg": "$cal" },
    "minBmi": { "$min": "$cal" },
    "maxBmi": { "$max": "$cal" }
  }}
])

https://mongoplayground.net/p/KKCrxBZA

票数 3
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61581459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档