mongodb 查询与 mysql

mongodb query vs mysql

我有以下 MySQL 查询,我在其中完成了总利润,其中包含以下字段:费率、信用(金钱)

SELECT SUM((credit*(100-rate))/100) FROM roznamcha WHERE  (accountNum=$id AND rate!=0.0)'

我在 mongodb 中使用 node.js 编写了以下查询,但它 returns null 无论我的数据库中是否有一些数据

    const profit=await roznamcha.aggregate([  
        {
            $match:{
                rate:{$ne:0}
            }
        },
        {
            $group:{
                _id :'$accountNum',
            }
        },
        {
        $addFields:{
                resultMultiply:{
                   $divide:[
                       {$multiply:['$credit','$rate-0']},100
                   ]

                },
    sumcredit:{
        $sum:'$resultMultiply'
    }
         } }
        
    ])
    res.status(201).json({
        status:'success',
       
        data:{
           profit
        }
    })

我的输出:

    {
    "status": "success",
    "data": {
        "profit": [
            {
                "_id": "612deac8fbc8ef21a0fa4ea7",
                "resultMultiply": null,
                "sumcredit": 0
            },
            {
                "_id": "612223327e2af83a4cec1272",
                "resultMultiply": null,
                "sumcredit": 0
            }
        ]
    }

我的架构:

const mongoose = require('mongoose');

const roznamchaSchem=mongoose.Schema({
    accountNum: {
        type:mongoose.Schema.ObjectId,
        ref:'account',
        required: ['please specify this record is from who', true],
    },
    credit: {
        type: Number,
        default: 0
    },
    debit: {
        type: Number,
        default: 0
    },
    rate: {
        type: Number,
        default: 0
    },
description:{
        type:String,
        required:['description can not be empty',true],
        minlength: 8
    },
    issueDate:{
            type: Date,
            required:['add an valide date',true]
}
});
roznamchaSchem.index({accountNum:-1});
const Roznamcha=mongoose.model('roznamcha',roznamchaSchem);
module.exports=Roznamcha;

和我的文档示例:

id:612f533e8eb5533f303966e4
credit:50
debit:0
rate:2
accountNum:612deac8fbc8ef21a0fa4ea7
description:"this it for you"
issueDate:6543-01-01T00:00:00.000+00:00

谁能指导我解决这个问题?

'$rate-0' 指的是名为“rate-$100”的字段。您可能打算减去 using

{$subtract: [ 100, "$rate"]}

不能使用数学运算符进行减法,必须使用$subtract聚合运算符。

resultMultiply: {
  $divide: [{
      $multiply: [
        "$credit",
        { $subtract: [ 100, "$rate" ] }
      ]
    },
    100
  ]
}

除了@Joe 和@Nenad 还回答了减法错误:'$rate-$100';

您需要重新定位您的逻辑结构。

  1. 执行计算:SUM((credit*(100-rate))/100).
  2. $accountNum 分组并汇总 SUM resultMultiply
db.collection.aggregate([
  {
    $match: {
      rate: {
        $ne: 0
      }
    }
  },
  {
    $addFields: {
      resultMultiply: {
        $divide: [
          {
            $multiply: [
              "$credit",
              {
                "$subtract": [
                  100,
                  "$rate"
                ]
              }
            ]
          },
          100
        ]
      }
    }
  },
  {
    $group: {
      _id: "$accountNum",
      total: {
        $sum: "$resultMultiply"
      }
    }
  }
])

Output

[
  {
    "_id": 2,
    "total": 1.5
  },
  {
    "_id": 1,
    "total": 5.5
  }
]

Sample MongoDB playground