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')
我收到错误说:
生成时间戳的正确方法是什么?如何使用正确的ts值查询oplog?
以下是时间戳的文档: http://mongodb.github.io/node-mongodb-native/core/api/Timestamp.html
但我无法弄清楚低数字/高数字的含义。
答案 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);