获取时间戳现在(当前时间)用于查询mongodb oplog

时间:2018-03-17 01:09:38

标签: node.js mongodb bson mongodb-oplog

oplog有一个名为ts的字段,如下所示:

db.oplog.rs.find({ts:{$gt:x}});

我想查询oplog,如下:

const x = new Timestamp();

如何生成时间戳,现在代表?现在30秒前怎么样?

如果我这样做:

Select a.name, b.name 
From temp_number a
left join temp_port  b on b.numberid = a.numberid
Where b.name = 'ip sub'
and a.numberid not in (Select c.numberid from temp_port c where c.name <> 'ip sub')

我收到错误说:

enter image description here

生成时间戳的正确方法是什么?如何使用正确的ts值查询oplog?

以下是时间戳的文档: http://mongodb.github.io/node-mongodb-native/core/api/Timestamp.html

但我无法弄清楚低数字/高数字的含义。

2 个答案:

答案 0 :(得分:2)

该时间戳是UNIX纪元的秒数​​,而Date()是毫秒。所以......

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)}})

答案 1 :(得分:0)

这似乎产生了当前时间,但我坦率地不知道为什么:

import {Timestamp} from 'bson';
const t = new Timestamp(1, Math.ceil(Date.now()/1000));

此值可用于查询db中的字段,该字段具有时间戳字段,如下所示:

query.ts = {$gt: t};
const q = coll.find(query);