【问题标题】:How to calculate Product of Sum (Array fields) in mongodb?如何在 mongodb 中计算 Sum(数组字段)的乘积?
【发布时间】:2019-03-15 20:48:44
【问题描述】:

//样本采集

db.grades.insertMany([{ _id: 1, quizzes: [ 1, 2, 3 ] },
{ _id: 2, quizzes: [ ] },
{ _id: 3, quizzes: [ 3, 8, 9 ] }])

以下是我正在使用并获得结果的查询。 //总和的乘积

db.grades.aggregate(
   [
    { $project:
         { sumof:
            {
              $map:
                 {
                   input: "$quizzes",
                   as: "grade",
                   in: { $sum :[ "$$grade", "$$grade" ] }
                 }
            }
         }
      },

    {   $project :
        { "productOfSum":
            { $reduce :
                { input : '$sumof',
                    initialValue: 1,
                in : {$multiply :["$$value","$$this"]}
                }
            }
        }
    }   
    ]
)

查询的输出如下。

{"_id":1,"productOfSum":48}
{"_id":2,"productOfSum":1}
{"_id":3,"productOfSum":1728}

任何人都可以建议 "_id:2" 的值如何以及为什么会以 1 的形式出现,即使数组是

【问题讨论】:

  • 因为initialValue1
  • 然而数组为空。将一个空数组乘以 1,结果应该是 1 还是 0?

标签: mongodb


【解决方案1】:

试试这个: db.grades.aggregate( [

{$project:
{quizzes:
    {$cond:
        [{$eq: [{$size: "$quizzes"}, 0]} , [0], "$quizzes"] } 
    }
 },

{ $project:
     { sumof:
        {
          $map:
             {
               input: "$quizzes",
               as: "grade",
               in: { $sum :[ "$$grade", "$$grade" ] }
             }
        }
     }
  },

{   $project :
    { "productOfSum":
        { $reduce :
            { input : '$sumof',
                initialValue: 1,
            in : {$multiply :["$$value","$$this"]}
            }
        }
    }
}   
]

)

【讨论】:

  • 你必须用 0 值初始化空数组
  • 请点击对您最有帮助的答案左侧的复选标记来关闭您的问题
猜你喜欢
  • 2023-01-03
  • 2021-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-21
  • 2020-06-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多