Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将字符串转换为mongodb中数组中的数值和计数和_Mongodb_Mongodb Query_Aggregation Framework - Fatal编程技术网

将字符串转换为mongodb中数组中的数值和计数和

将字符串转换为mongodb中数组中的数值和计数和,mongodb,mongodb-query,aggregation-framework,Mongodb,Mongodb Query,Aggregation Framework,我想用数组中的字符串类型求总金额,所以我在mongo中写这个。需要帮忙吗 已尝试: db.compte.aggregate([ {$project:{ account: "$auditMessages.eventMetaData.Counterparty Name", amount: "$auditMessages.eventMetaData.Transaction Amount", "total": {$sum:"$amount"} }}]) { "_id" : Obj

我想用数组中的字符串类型求总金额,所以我在mongo中写这个。需要帮忙吗

已尝试:

db.compte.aggregate([
 {$project:{
   account: "$auditMessages.eventMetaData.Counterparty Name",
   amount: "$auditMessages.eventMetaData.Transaction Amount",
   "total": {$sum:"$amount"}
 }}])
{
"_id" : ObjectId("5ed638e566a699750cbb1b0f"),
"account" : [
  "Mr Jalel CHAHED",
  "Mr Jalel CHAHED",
  "Mr Jalel CHAHED",
  "Mr Jalel CHAHED"
 ],
"amount" :
 [ 
  "4.32",
  "4.32",
   "1.32",
   "1.32"
 ],
"total" : 0}
db.collection.aggregate([
    {
      $project: {
        account: { $arrayElemAt: [ "$auditMessages.eventMetaData.Counterparty Name", 0 ] }, // get name from first element in array,use only if name is same in all objects
        total: {
          $reduce: {
            input: "$auditMessages.eventMetaData.Transaction Amount", // Iterate on array
            initialValue: 0,
            in: { $trunc: [ { $add: [ "$$value", { $toDouble: "$$this" } ] }, 2 ] } // convert string to double, sum-up & truncate to 2 digits
          }
        }
      }
    }
  ])
结果:

db.compte.aggregate([
 {$project:{
   account: "$auditMessages.eventMetaData.Counterparty Name",
   amount: "$auditMessages.eventMetaData.Transaction Amount",
   "total": {$sum:"$amount"}
 }}])
{
"_id" : ObjectId("5ed638e566a699750cbb1b0f"),
"account" : [
  "Mr Jalel CHAHED",
  "Mr Jalel CHAHED",
  "Mr Jalel CHAHED",
  "Mr Jalel CHAHED"
 ],
"amount" :
 [ 
  "4.32",
  "4.32",
   "1.32",
   "1.32"
 ],
"total" : 0}
db.collection.aggregate([
    {
      $project: {
        account: { $arrayElemAt: [ "$auditMessages.eventMetaData.Counterparty Name", 0 ] }, // get name from first element in array,use only if name is same in all objects
        total: {
          $reduce: {
            input: "$auditMessages.eventMetaData.Transaction Amount", // Iterate on array
            initialValue: 0,
            in: { $trunc: [ { $add: [ "$$value", { $toDouble: "$$this" } ] }, 2 ] } // convert string to double, sum-up & truncate to 2 digits
          }
        }
      }
    }
  ])

您正在
$project
中创建
amount
字段,并在同一阶段使用它本身,这就是为什么它在
“total”上返回
0
:{$sum:$amount”}
,而且
$sum
似乎不接受数组

假设您的文档看起来像:

{
    "auditMessages": {
      eventMetaData: [
        {
          "Counterparty Name": "Mr Jalel CHAHED",
          abc: 1,
          "Transaction Amount": "4.32"
        },
        {
          "Counterparty Name": "Mr Jalel CHAHED",
          abc: 11,
          "Transaction Amount": "4.32"
        },
        {
          "Counterparty Name": "Mr Jalel CHAHED",
          abc: 12,
          "Transaction Amount": "1.32"
        },
        {
          "Counterparty Name": "Mr Jalel CHAHED",
          abc: 122,
          "Transaction Amount": "1.32"
        }
      ]
    }
  }
As
auditMessages.eventMetaData
是一个数组,执行以下操作时:

“$auditMessages.eventMetaData.contractor Name”
“$auditMessages.eventMetaData.Transaction Amount”
那么您得到的是一个值数组,就像您现在在结果中看到的值一样

查询:

db.compte.aggregate([
 {$project:{
   account: "$auditMessages.eventMetaData.Counterparty Name",
   amount: "$auditMessages.eventMetaData.Transaction Amount",
   "total": {$sum:"$amount"}
 }}])
{
"_id" : ObjectId("5ed638e566a699750cbb1b0f"),
"account" : [
  "Mr Jalel CHAHED",
  "Mr Jalel CHAHED",
  "Mr Jalel CHAHED",
  "Mr Jalel CHAHED"
 ],
"amount" :
 [ 
  "4.32",
  "4.32",
   "1.32",
   "1.32"
 ],
"total" : 0}
db.collection.aggregate([
    {
      $project: {
        account: { $arrayElemAt: [ "$auditMessages.eventMetaData.Counterparty Name", 0 ] }, // get name from first element in array,use only if name is same in all objects
        total: {
          $reduce: {
            input: "$auditMessages.eventMetaData.Transaction Amount", // Iterate on array
            initialValue: 0,
            in: { $trunc: [ { $add: [ "$$value", { $toDouble: "$$this" } ] }, 2 ] } // convert string to double, sum-up & truncate to 2 digits
          }
        }
      }
    }
  ])
测试:


Ref:

您正在
$project
中创建
amount
字段,并在同一阶段使用它本身,这就是为什么它在
“total”上返回
0
:{$sum:$amount}
,而且
$sum
似乎不接受数组

假设您的文档看起来像:

{
    "auditMessages": {
      eventMetaData: [
        {
          "Counterparty Name": "Mr Jalel CHAHED",
          abc: 1,
          "Transaction Amount": "4.32"
        },
        {
          "Counterparty Name": "Mr Jalel CHAHED",
          abc: 11,
          "Transaction Amount": "4.32"
        },
        {
          "Counterparty Name": "Mr Jalel CHAHED",
          abc: 12,
          "Transaction Amount": "1.32"
        },
        {
          "Counterparty Name": "Mr Jalel CHAHED",
          abc: 122,
          "Transaction Amount": "1.32"
        }
      ]
    }
  }
As
auditMessages.eventMetaData
是一个数组,执行以下操作时:

“$auditMessages.eventMetaData.contractor Name”
“$auditMessages.eventMetaData.Transaction Amount”
那么您得到的是一个值数组,就像您现在在结果中看到的值一样

查询:

db.compte.aggregate([
 {$project:{
   account: "$auditMessages.eventMetaData.Counterparty Name",
   amount: "$auditMessages.eventMetaData.Transaction Amount",
   "total": {$sum:"$amount"}
 }}])
{
"_id" : ObjectId("5ed638e566a699750cbb1b0f"),
"account" : [
  "Mr Jalel CHAHED",
  "Mr Jalel CHAHED",
  "Mr Jalel CHAHED",
  "Mr Jalel CHAHED"
 ],
"amount" :
 [ 
  "4.32",
  "4.32",
   "1.32",
   "1.32"
 ],
"total" : 0}
db.collection.aggregate([
    {
      $project: {
        account: { $arrayElemAt: [ "$auditMessages.eventMetaData.Counterparty Name", 0 ] }, // get name from first element in array,use only if name is same in all objects
        total: {
          $reduce: {
            input: "$auditMessages.eventMetaData.Transaction Amount", // Iterate on array
            initialValue: 0,
            in: { $trunc: [ { $add: [ "$$value", { $toDouble: "$$this" } ] }, 2 ] } // convert string to double, sum-up & truncate to 2 digits
          }
        }
      }
    }
  ])
测试:


Ref:

当前查询有什么问题?目前的结果是什么?预期的结果是什么?我想合计金额,合计为11.28(4.32+4.32+1.32+1.32),但合计为0。这应该很容易,只需在此处按id或主列分组,然后对金额进行合计。你可能需要另一条管道。由于我们不知道
compte
集合的外观,我们无法提供此问题的任何具体解决方案。我使用了分组方式,相同的结果总计0当前查询的问题是什么?目前的结果是什么?预期的结果是什么?我想合计金额,合计为11.28(4.32+4.32+1.32+1.32),但合计为0。这应该很容易,只需在此处按id或主列分组,然后对金额进行合计。你可能需要另一条管道。由于我们不知道compte集合是什么样子的,我们无法提供此问题的任何具体解决方案。我使用了group by,相同的结果总计0如何获得一个名称,例如Jarel CHAHED先生,总数为4谢谢@m1h3r:我不明白你的意思!如何才能得到一个名字,例如Jarel CHAHED先生,总数是4谢谢@m1h3r:我不明白你的意思!