Node.js 获取查询mongodb oplog的时间戳立即重新呈现(当前时间)
oplog有一个名为ts的字段,如下所示:Node.js 获取查询mongodb oplog的时间戳立即重新呈现(当前时间),node.js,mongodb,bson,mongodb-oplog,Node.js,Mongodb,Bson,Mongodb Oplog,oplog有一个名为ts的字段,如下所示: {"ts":"6533707677506207745","t":2,"h":"-7325657776689654694", ...} 我想查询oplog,如下所示: db.oplog.rs.find({ts:{$gt:x}}); query.ts = {$gt: t}; const q = coll.find(query); 如何生成表示现在的时间戳?30秒前怎么样 如果我这样做: const x = new Timestamp(); 我得到一
{"ts":"6533707677506207745","t":2,"h":"-7325657776689654694", ...}
我想查询oplog,如下所示:
db.oplog.rs.find({ts:{$gt:x}});
query.ts = {$gt: t};
const q = coll.find(query);
如何生成表示现在的时间戳?30秒前怎么样
如果我这样做:
const x = new Timestamp();
我得到一个错误,说:
生成时间戳的正确方法是什么?如何使用正确的ts值查询oplog?
以下是时间戳的文档:
但我不知道低数字/高数字是什么意思。这似乎得出了当前的时间,但坦率地说,我不知道为什么:
import {Timestamp} from 'bson';
const t = new Timestamp(1, Math.ceil(Date.now()/1000));
此值可用于查询数据库中具有时间戳字段的字段,如下所示:
db.oplog.rs.find({ts:{$gt:x}});
query.ts = {$gt: t};
const q = coll.find(query);
时间戳是从UNIX纪元开始的秒,日期()是毫秒。所以
db.oplog.rs.find({ts:{$gt:Timestamp((new Date().getTime()-30000)/1000,0)}})
我们在这里要做的是得到30000毫秒前的当前时间,除以1000得到秒,然后向Timestamp-function添加(需要的)第二个参数
编辑:
当然,如果需要确切的Timestamp()值,可以将(new Date().getTime()-30000)/1000的小数部分作为第二个参数填充
var x=(new Date().getTime()-30000)/1000;
var y=Math.floor(x);
var z=Math.round((x-y)*1000);
db.oplog.rs.find({ts:{$gt:Timestamp(y,z)}})
谢谢,时间戳的第一个和第二个参数是什么?(高位和低位对吗?)…你能再解释一下吗?我不明白,这个问题是类似的:是的,它是时间戳(,),所以实际上,在除以1000之后,你可以把小数部分作为第二个参数。我使用了零,所以之后的每个事件都会被列出。