【问题标题】:mongodb update reusing current valuemongodb更新重用当前值
【发布时间】:2017-12-14 14:23:55
【问题描述】:

我正在努力将费用在字段状态中的值动态传递给“replacedStatus”字段,然后它被下面的查询更新所取代。我尝试使用变量 $status 就像它在聚合查询中使用的那样,但它不起作用,因为它正在用值 $status 更新的文档字面上,不是真的更新前的状态。我使用的是 2.6.9 版本的 Mongodb。

我正在尝试这个

db.getCollection('charges').
update({
  'supports.dest': ObjectId("5880eb0c426c9b0400e1016a"),
  "date": {
    "$gte": new Date(2017, 11),
    "$lt": new Date(2017, 12)
  },
  "status": {
    "$nin": ["Captured"]
  }
}, {
  "$set": {
    "status": "BillingSuspended",
    "replacedStatus": "$status"
  },
  "$push": {
    "logs": {
      "replacedStatus": "Captured",
      "date": new Date('2017-12-13T22:00:00.000Z')
    }
  }
}, {
  "multi": true
})

如果你能帮助我,我将不胜感激。

【问题讨论】:

    标签: javascript mongodb variables mongodb-query javascript-objects


    【解决方案1】:

    $rename 运算符是您的朋友。以下内容应该可以帮助您:

    db.getCollection('charges').
    update({
      'supports.dest': ObjectId("5880eb0c426c9b0400e1016a"),
      "date": {
        "$gte": new Date(2017, 11),
        "$lt": new Date(2017, 12)
      },
      "status": {
        "$nin": ["Captured"]
      }
    }, {
      "$rename": {
        "status": "replacedStatus" // rename status --> replacedStatus to capture old value
      },
      "$set": {
        "status": "BillingSuspended",
      },
      "$push": {
        "logs": {
          "replacedStatus": "Captured",
          "date": new Date('2017-12-13T22:00:00.000Z')
        }
      }
    }, {
      "multi": true
    })
    

    【讨论】:

    • 我收到以下错误@dnickless:无法执行脚本。错误:使用对象指定 upsert 和 multi 时,第四个参数必须为空。 : DBCollection.prototype._parseUpdate@src/mongo/shell/collection.js:522:1 DBCollection.prototype.update@src/mongo/shell/collection.js:552:18 @(shell):1:1
    • 我的错,我的解决方案中有一些多余的括号。请再试一次。对不起。
    • 感谢@dnickless 帮助我,但现在我遇到了以下错误:“无法同时更新 'status' 和 'status'”
    • 这似乎是 Mongoose 的问题,另请参见此处:github.com/Automattic/mongoose/issues/2593您在这里使用的是旧版本吗?
    • 我正在使用 mongo v3.4.5,它很安静,不是吗?
    猜你喜欢
    • 2011-01-29
    • 2011-05-26
    • 1970-01-01
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    • 2013-01-10
    • 2017-10-25
    • 1970-01-01
    相关资源
    最近更新 更多