我正在尝试从mysql迁移到Mongodb,并且想要像在Mysql中使用NOW()一样插入当前日期,有没有人知道1行解决方案或者我应该用PHP做什么?谢谢
如果您正在使用MongoDB的默认的ObjectID为您的_id领域,这些包括可以用来推断为一个文件创建日期时间戳组件.PHP驱动程序包含一个MongoId :: getTimestamp()方法,可用于从ObjectID中提取时间.
请注意,ObjectID通常由PHP驱动程序(而不是MongoDB服务器)生成,因此,ntpd如果时间戳准确性很重要,请让时钟与之同步或类似.
在即将发布的MongoDB 2.6版本中,添加了一个新的$currentDate更新修饰符,它支持设置服务器端日期和时间戳.有关更多信息,请参阅MongoDB Jira问题跟踪器中的SERVER-10911.
在此服务器端支持可用之前,添加当前日期/时间的最佳方法是使用time()或等效函数在应用程序代码中设置.
对于MongoDB 4.2. 您可以使用NOW来获取当前的日期时间值。
用例:访问变量,以前缀
$$和引号括起来。
db.students.updateOne( { _id: 3 }, [ { $set: { "test3": 98, modified: "$$NOW"} } ] )
Run Code Online (Sandbox Code Playgroud)
此外,CLUSTER_TIME将返回当前时间戳值,但仅适用于副本集和分片集群。
研究了很长时间,发现这似乎有效:
db.a.findAndModify({
query: { _id: { $lt: 0 } },
update: { $currentDate: { dateField: true } },
upsert: true,
new: true // optional
});
Run Code Online (Sandbox Code Playgroud)
奇怪的查询部分背后的想法是它总是返回“未找到”,因此它总是创建文档(upsert: true),但也不将其用作新插入文档的值(例如,{ _id: 0 }在查询中使用将实际上插入一个 _id 字段值为 0 的文档)。
使用批量可以采取类似的方法:
var aBulk = db.a.initializeUnorderedBulkOp();
aBulk
.find({ _id: { $lt: 0 } })
.upsert()
.updateOne({
$currentDate: { dateField: true }
});
aBulk.execute();
Run Code Online (Sandbox Code Playgroud)