mongodb更新重用当前值

时间:2017-12-14 14:23:55

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

我正在努力将“chargeStatus”字段动态传递给字段状态中的电荷在被更新后的查询更改之前具有的值。我尝试使用变量 $ status ,就像它在聚合查询中使用的那样,但是它不起作用,因为文件正在更新,其值 $ status 字面意义,而不是真的更新前的状态。我正在使用Mongodb的2.6.9版本。

我正在尝试这个

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
})

如果你能帮助我,我会很感激。

1 个答案:

答案 0 :(得分:0)

$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
})