据我了解,翻译成 SQL 你想做这样的事情
UPDATE [Order] SET
EndTime = GETDATE(),
Duration = GETDATE() - StartTime
WHERE OrderID = ''
不幸的是,这在 MongoDB 中尚不支持。但是,您仍然可以通过 2 次更新来做到这一点。第一个不一定是a findAndModify
,afindOne
就够了。
var startTime = db.order.findOne({order: 1}).startTime;
var endTime = new Date();
db.order.findAndModify({
query: {order: 1},
update: {$set: {endTime: endTime, duration: endTime - startTime}}
});
实际上,我认为findAndModify
here 不会为您带来比 pure 任何优势update
,除非您想防止同一订单被多次更新。在这种情况下,最好像这样更改条件:
var startTime = db.order.findOne({order: 1}).startTime;
var endTime = new Date();
db.order.findAndModify({
query: {order: 1, endTime: {$exists: false}},
update: {$set: {endTime: endTime, duration: endTime - startTime}}
});
在我看来,您应该有一些东西来控制订单的状态,例如已订购/已付款/已取消...锁定带有状态的订单会比{endTime: {$exists: false}}
.