假设你有一个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
答案 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
的值分配给x
和new 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() } }
)