小编Ana*_*vek的帖子

Mongodb findoneandupdate 与聚合管道

我在 MongoDB 中有这样的数据

    {"_id":{"$oid":"5ec4ed0b94996124187b95ce"},
           "cid":"245345323",
     "dtl":[
          {"_id":{"$oid":"5ed5ab655df7930ec424be1e"},
              "sid":"test",
              "amt":{"$numberInt":"48"},
              "Name":"test"},
          {"_id":{"$oid":"5ed5ac9f79a75423d4bc0270"},
             "sid":"s",
             "amt":{"$numberInt":"14"},
             "Name":"sfds"},
          {"_id":{"$oid":"5ed5ace7d204ab144863ed7a"},
             "sid":"wesad",
             "amt":{"$numberInt":"6"},
             "Name":"2sdad"
          },
        "updated":{"$date":{"$numberLong":"1589964043787"}},
        "__v":{"$numberInt":"6"},
       "TotalAmt":{"$numberInt":"68"}}
Run Code Online (Sandbox Code Playgroud)

仅当数组中的 amt 字段的值大于 10 时,我才需要更新 TotalAmt 字段。我使用了以下 2 个选项

PM.findOneAndUpdate(
      {
        _id: MongoId,
      },
      [
        {
          $set: {
            //TotalAmt: { $sum: '$dtl.amt' },
            /*TotalAmt: {
              $cond: {
                if: { $gte: ['$dtl.amt', 10] },
                then: { $sum: '$dtl.amt' },
                else: 0,
              },
            },*/
          },
        },
      ],
      { new: true }
    )
Run Code Online (Sandbox Code Playgroud)

在没有 amt > 10 条件的情况下它工作正常(第一个选项被注释)。但如果我添加条件则不起作用。任何帮助,将不胜感激。谢谢

aggregate-functions mongoose mongodb mongodb-query

5
推荐指数
1
解决办法
2580
查看次数