【问题标题】:How can I convert my normal timestamp into a BSON timestamp?如何将我的普通时间戳转换为 BSON 时间戳?
【发布时间】:2016-03-14 08:54:48
【问题描述】:

我正在使用https://www.npmjs.com/package/mongodb

mongodb 已经把我的时间戳变成了 BSON(我知道这很正常)

我的时间戳是 641912491,而在数据库中它看起来像 1457904327000.000000

我有一个文档,其中包含一个名为 date_in_the_past 的密钥,它以 BSON 形式保存我的时间戳。

注意:我完全知道 mongodb _id 键包含一个日期,但在这种情况下它对我没有用,因为那将是文档写入数据库的日期(不是过去的日期我正在寻找的)

如何将我的普通时间戳转换为 BSON 时间戳?

我试图理解mongodb/js-bsonmongodb/js-bson/blob/master/lib/bson/timestamp.js,但我不知道该怎么做。

我想做的例子:

var past=timestampToBSON(641912491);
db.collection('docs').find({date_in_the_past:past}).limit(1).toArray(function(e,r){});

【问题讨论】:

  • 你试过只使用javascript日期对象var past = new Date(641912491 * 1000)
  • 是的,这只是给了我Sat May 05 1990 14:01:31 GMT+0100 (BST)
  • 这不是您要查找的日期吗?
  • 我需要用 BSON 查找它,不是吗? db.collection('docs').find({date_in_the_past:1457904327000.000000})
  • 不是真的,如果你存储一个日期对象,你会查找一个日期对象,MongoDB 只在内部将它存储为 BSON,你不必传递它 BSON

标签: javascript node.js mongodb timestamp bson


【解决方案1】:

如果它被存储为一个 bson 时间戳对象,你可以这样做

var Timestamp = require('mongodb').Timestamp; 

var past = Timestamp(641912491,1);
db.collection('docs').find({date_in_the_past:past})

db.collection('docs').find({date_in_the_past: Timestamp(641912491,1)})

这里有更多信息和示例 https://docs.mongodb.org/manual/reference/bson-types/#timestamps

【讨论】:

  • 第二个参数是什么意思?总是1
  • 您可以使用Timestamp.fromNumber(641912491)。在Timestamp(x, y) 上,第二个参数用于更高精度的数字
猜你喜欢
  • 1970-01-01
  • 2021-05-10
  • 2018-07-15
  • 1970-01-01
  • 1970-01-01
  • 2012-08-07
  • 2020-01-09
  • 2017-12-03
  • 1970-01-01
相关资源
最近更新 更多