我目前正在努力将我们的PHP后端从MySQL转换为MongoDB。
我们经常在MySQL中使用这样的东西:
UPDATE table_1 SET completion_time = NOW() + INTERVAL 90 MINUTE WHERE id = 1;
我如何在MongoDB中执行此操作?我需要使用2个查询吗?首先使用$ currentDate设置completion_time,然后使用第二个查询来增加它?我已经读过$ inc不适用于MongoDB中的日期,... ...
答案 0 :(得分:2)
您可以尝试创建一个日期变量,保存当前日期+ 90分钟后,您可以使用该日期变量在更新中设置completion_time
字段:
var ninetyMinutesLater = new Date();
ninetyMinutesLater.setMinutes(ninetyMinutesLater.getMinutes() + 90);
db.table_1.update(
{ "_id": 1 },
{
"$set": {
"completion_time": ninetyMinutesLater
}
}
);
答案 1 :(得分:0)
请一定尝试这个,
db.table_1.update({"id":1 },{completion_time: { $add: [ "$date", 90 ] }})
答案 2 :(得分:0)
我发现你已经用mongodb-php
标记了这个,所以我假设你使用的是PHP。 MongoDB确实有一个$currentDate
运算符,但目前无法实际设置到该日期的偏移量。
例如我在3.0上尝试了@ diwakar的回答:
> db.table_1.update({"id":1 },{completion_time: { $add: [ "$currentDate", 90 ] }})
2015-03-23T11:22:05.497+0000 E QUERY Error: field names cannot start with $ [$add]
at Error (<anonymous>)
at DBCollection._validateForStorage (src/mongo/shell/collection.js:160:19)
at DBCollection._validateForStorage (src/mongo/shell/collection.js:164:18)
at DBCollection._validateUpdateDoc (src/mongo/shell/collection.js:387:14)
at Object.findOperations.updateOne (src/mongo/shell/bulk_api.js:675:20)
at DBCollection.update (src/mongo/shell/collection.js:454:22)
at (shell):1:12 at src/mongo/shell/collection.js:160
所以目前这需要像客户端那样完成:
$mongo->collection->insert(['completion_time' => new MongoDate(time() + (60*90))])
这似乎是唯一的方法。