#mongodb #date #timestamp #type-conversion #bson
#mongodb #Дата #временная метка #тип-преобразование #bson
Вопрос:
У меня есть коллекция в MongoDB, в которой есть created
поля со значениями, которые в настоящее время хранятся как объект BSON ISODate. Я хочу преобразовать все это в объекты NumberLong, содержащие временную метку.
Сначала я попробовал это (в оболочке Mongo):
db.collection.find( { "created" : { "$type" : 9 } } ).forEach( function (x) {
x.created = new NumberLong(x.created);
db.collection.save(x);
});
JavaScript execution failed: Error: could not convert "Tue Mar 18 2014 18:11:21 GMT-0400 (EDT)" to NumberLong
По-видимому, строка даты не может быть приведена как long …достаточно справедливо. Затем я попробовал это, думая, что смогу использовать метод UTC объекта даты Javascript:
db.collection.find( { "created" : { "$type" : 9 } } ).forEach( function (x) {
x.created = new Date(x.created).UTC();
db.collection.save(x);
});
JavaScript execution failed: TypeError: Object Tue Mar 18 2014 18:11:21 GMT-0400 (EDT) has no method 'UTC'
Я пробовал несколько других вариантов, но пока ничего не сработало. Любая помощь будет принята с благодарностью!
Ответ №1:
Чтобы получить доступ к базовому числовому значению Date
, вы можете вызвать getTime()
его:
x.created = new NumberLong(x.created.getTime());
Ответ №2:
Объект ISODate имеет метод «valueOf», который возвращает время эпохи. Вот пример, генерирующий это с помощью оболочки mongo:
replset:PRIMARY> var date = ISODate()
replset:PRIMARY> date
ISODate("2014-06-25T16:31:46.994Z")
replset:PRIMARY> date.valueOf()
1403713906994
replset:PRIMARY>
Комментарии:
1. Спасибо за ваш ответ. JohnnyHK опередил вас, но ваш ответ также очень полезен. Приветствия!