gpt4 book ai didi

node.js - Mongojs.ObjectId() 产生错误的时间戳

转载 作者:可可西里 更新时间:2023-11-01 09:26:07 25 4
gpt4 key购买 nike

在我的 node.js 脚本中创建一个新的 ObjectId 时使用:

mongojs.ObjectId()

我得到一个像这样的_id

“f5818257dd0b55ce321f87b5” 

当我使用时:

mongojs.ObjectId(“f5818257dd0b55ce321f87b5”).getTimestamp()

我得到:

“Sun Jul 10 2016 19:12:21 GMT+0200 (CEST)"

但是当我在 MongoDB Shell 中使用 ObjectId("f5818257dd0b55ce321f87b5").getTimestamp() 时,我得到:

ISODate("2100-07-10T12:23:51Z")

当我想按 _id 对我的文档进行排序时:

db.stores.find().sort({_id: -1})

由于 ObjectId 中的时间戳错误,文档以错误的顺序返回。

如何让 mongojs 以正确的格式生成 ObjectIds

我真的很困惑,谁能帮帮我?

编辑:当我使用 mongojs 插入文档时,我得到一个 ObjectId,如:

“30a282576f9f2c4772e69cd9”

当我得到时间戳时:

ObjectId("30a282576f9f2c4772e69cd9").getTimestamp()

它返回:

ISODate("1995-11-09T22:36:07Z")

但是当我使用 MongoDB Shell 插入文档时,我得到一个 ObjectId,如下所示:

“5782a4809f3c4cbed9f2a8a1”

当我使用以下方法从此 ID 获取时间戳时:

ObjectId("5782a4809f3c4cbed9f2a8a1").getTimestamp()

我得到:

ISODate("2016-07-10T19:39:44Z")

这两个文档的创建间隔大约为 5 分钟。为什么用mongojs插入的ObjectId中的日期是错误的?

最佳答案

这不是真正的答案,因为我不知道是谁的错或如何正确修复它,但原因是由于不同的字节顺序。

以您的 30a282576f9f2c4772e69cd9 示例并在其上切换字节顺序(见下文)产生 5782a230472c9f6fd99ce672,它在 MongoDB shell 中被正确解释。

代码如下:

let buf1 = Buffer.from('30a282576f9f2c4772e69cd9', 'hex');
let buf2 = Buffer.alloc(buf1.length);

[ 0, 4, 8 ].forEach(o => buf2.writeUInt32LE( buf1.readUInt32BE(o, 4), o ));

console.log(buf1.toString('hex'));
console.log(buf2.toString('hex'));

我认为这与 mongojs 无关,因为那只是使用官方的 MongoDB Node 驱动程序。

关于node.js - Mongojs.ObjectId() 产生错误的时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38295305/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com