我正在使用findAndModify()
函数调用$max
,以将字段的值设置为最大值。
例如,如MongoDB documentation所示。
db.scores.update( { _id: 1 }, { $max: { highScore: 950 } } )
仅在文档更新时,我还要设置一个lastUpdatedTimestamp
。我不能只执行$set
,因为这将始终更改上次更新的时间戳。 MongoDB中是否有一个很好的机制来仅在文档更新的情况下设置另一个值?与$setOnInsert
类似,但有任何更新。
如果这里没有什么好的方法?现在,我正在考虑可以进行常规查找。然后进行局部比较。如果新值大于旧值,则更新很有可能会更新文档。因此,我只将$set
包括在lastUpdatedTimestamp
中。
答案 0 :(得分:1)
您可以首先查询以查找highScore小于输入值的记录,然后进行更新。这只会在更新记录时设置lastUpdatedTimestamp。
db.scores.findAndModify({
query: { highScore: { $lt: 950 } },
update: { $set: { "highScore" : 950, "lastUpdatedTimestamp" : new Date() } },
})
答案 1 :(得分:1)
据我所见,你想。仅当您的highScore
可以更新时才更新文档。
仅文档的分数低于新分数,它将使用score
字段和lastUpdatedTimestamp
进行更新
最好的方法是将新分数放入过滤器中,以找到与旧分数匹配的文档<新分数
这样做
db.scores.update(
{_id :4,highScore:{$lt:900}},
{$set:{highScore:900},
$currentDate: { lastModified: true }})
或设置修改时间,例如
{$set:{highScore:900 ,lastupdatetime: new_time},