MongoDB中是否有NOW()的等价物

Sek*_*kai 9 mongodb

我正在尝试从mysql迁移到Mongodb,并且想要像在Mysql中使用NOW()一样插入当前日期,有没有人知道1行解决方案或者我应该用PHP做什么?谢谢

Ste*_*nie 7

获取文档创建的时间戳

如果您正在使用MongoDB的默认的ObjectID为您的_id领域,这些包括可以用来推断为一个文件创建日期时间戳组件.PHP驱动程序包含一个MongoId :: getTimestamp()方法,可用于从ObjectID中提取时间.

请注意,ObjectID通常由PHP驱动程序(而不是MongoDB服务器)生成,因此,ntpd如果时间戳准确性很重要,请让时钟与之同步或类似.

更新日期/时间戳

在即将发布的MongoDB 2.6版本中,添加了一个新的$currentDate更新修饰符,它支持设置服务器端日期和时间戳.有关更多信息,请参阅MongoDB Jira问题跟踪器中的SERVER-10911.

在此服务器端支持可用之前,添加当前日期/时间的最佳方法是使用time()或等效函数在应用程序代码中设置.


Pen*_*Liu 6

对于MongoDB 4.2. 您可以使用NOW来获取当前的日期时间值。

用例:访问变量,以前缀$$和引号括起来。

db.students.updateOne( { _id: 3 }, [ { $set: { "test3": 98, modified: "$$NOW"} } ] )
Run Code Online (Sandbox Code Playgroud)

此外,CLUSTER_TIME将返回当前时间戳值,但仅适用于副本集和分片集群。


Gia*_*ino 5

研究了很长时间,发现这似乎有效:

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)