Как я могу преобразовать мою обычную метку времени в метку времени BSON?

Я использую https://www.npmjs.com/package/mongodb

mongodb превратил мою метку времени в BSON (я знаю, что это нормально)

моя временная метка - это 641912491, а в базе данных это выглядит 1457904327000.000000.

У меня есть документ с ключом date_in_the_past, который содержит мою метку времени в форме BSON.

Примечание: я полностью осознаю, что ключ mongodb _id содержит дату, но в этом сценарии он бесполезен для меня, поскольку это будет дата, когда документ был записан в базу данных (а не дату в прошлом, которую я находясь в поиске)

Как преобразовать обычную метку времени в метку времени BSON?

Я пытался понять mongodb / js-bson и mongodb / 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){});

person Ben Muircroft    schedule 13.03.2016    source источник
comment
Вы пробовали просто использовать объект даты javascript var past = new Date(641912491 * 1000)   -  person adeneo    schedule 14.03.2016
comment
да, это дает мне Sat May 05 1990 14:01:31 GMT+0100 (BST)   -  person Ben Muircroft    schedule 14.03.2016
comment
Разве это не та дата, которую вы пытаетесь найти?   -  person adeneo    schedule 14.03.2016
comment
Мне нужно поискать это в BSON, не так ли? db.collection('docs').find({date_in_the_past:1457904327000.000000})   -  person Ben Muircroft    schedule 14.03.2016
comment
Не совсем, если вы сохранили объект даты, вы бы посмотрели объект даты, MongoDB хранит его только внутри как BSON, вам не нужно передавать его BSON   -  person adeneo    schedule 14.03.2016
comment
Пользовательский интерфейс клиента Robomongo сообщает мне, что это тип данных Double   -  person Ben Muircroft    schedule 14.03.2016


Ответы (1)


Если он хранится как объект временной метки bson, вы можете сделать что-то вроде этого

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

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

or

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

здесь есть дополнительная информация и примеры. https://docs.mongodb.org/manual/reference/bson-types/#timestamps

person PijusV    schedule 13.03.2016
comment
Что означает второй параметр? Всегда ли это 1? - person Time Killer; 27.08.2019
comment
Вы можете использовать Timestamp.fromNumber(641912491). на Timestamp(x, y) второй параметр используется для чисел с более высокой точностью - person PijusV; 04.09.2019