如何在单个mongo Query中将字段的值分配给另一个字段

时间:2016-01-22 06:22:16

标签: node.js mongodb mongoose mongodb-query

假设你有一个mongo记录:

{
    _id : 1234,
    x: 12,
    y: 34
}

我需要一个以

的方式更新特定_id的查询
x = y;//assign the value of y to x
y = new Date().getTime();//assign current time to y

对于特定的_id.currently我正在读取修改实体并更新它的id。这可以在单个查询中执行吗?什么是相当于使用Mongoose

1 个答案:

答案 0 :(得分:1)

除非您使用$where运算符,否则无法执行此操作。但是你应该避免这样做,因为使用$where可能导致性能下降,如documentation中所述:

  

$ where评估JavaScript并且无法利用索引。因此,当您使用标准MongoDB运算符(例如,$ gt,$ in)表达查询时,查询性能会提高。

db.collection.update({ '$where':  function() { return this.x === this.y }}, 
    {'$set': { 'y': new Date().getTime() }}
)

最好的方法是像你一样运行两个查询。一个用于检索_id值,另一个用于更新文档。

您无法使用单个MongoDB查询将y的值分配给xnew Date().getTime()y。您需要先使用y方法检索.findOne()值,然后使用其他查询来更新文档。

var y = db.collection.findOne({ '_id': <given ObjectId()> }, 
    { 'y': 1, '_id': 0 } 
)['y'];

db.collection.update( { '_id': <given ObjectId()> }, 
    { '$set': { 'x': y, 'y': new Date().getTime() } } 
)