2016-06-24 3 views
0

У меня есть коллекция mongoDB с документами, содержащими метку времени, которая является датой ISO.MongoDB добавляет годы в существующее поле ISODate

Как-то эти даты были испорчены при вставке, и теперь они в 1970 году! Я исправил свой код для вставки. Теперь он вставляет правильную метку времени.

Но мне нужно исправить старые данные, даты которых в 1970 году. Мне нужно добавить определенный период времени в метку времени каждой записи. Как 46 лет и 5 месяцев, чтобы изменить его до 2016 июня.

например
Текущая отметка времени:
"timestamp": "1970-01-01T00:00:00.000Z"

Новая метка времени:
` "метки времени": "2016-06-01T00: 00: 00.000Z"

, а затем увеличить временную отметку следующего на 10 секунд

"timestamp": "2016-06-01T00:00:20.000Z"
"timestamp": "2016-06-01T00:00:30.000Z"

и так далее ... ли возможно из Монго оболочки? Если нет, что еще я могу использовать?

+0

Трудно следовать без четких примеров. Можете ли вы изменить свой вопрос, чтобы включить в него существующий код для вставки новых документов, возможно, некоторые образцы документов из вашей коллекции, которые демонстрируют проблему? – chridam

+0

@chridam, извините, я был неясен. Я исправил свою вставку. Мне нужно, как я обновляю свои ISODates 1970 года и добавляю им 46 лет. Необходимо увеличить каждый из них на 10 секунд от последнего. –

+1

Меня интересует ваша оригинальная проблема, что это было? Не следует ли корректировать даты при фиксации вставок? – kazenorin

ответ

1
// for demo, create a record with some date 
> db.so.insert({_id: new ObjectId(), date: new Date(1970, 1, 1, 10, 10, 10)}) 
WriteResult({ "nInserted" : 1 }) 

// be sure it's created 
> db.so.find() 
{ "_id" : ObjectId("576ceec5827bed78eaa65cc6"), "date" : ISODate("1970-02-01T04:10:10Z") } 

// docs.forEach => update.doc.date => new Date(oldDate: hours, minutes, seconds) 
> db.so.find().forEach(function(doc) { var date = doc.date; db.so.update({_id: doc._id}, {$set: {date: new Date(2016, 5, date.getDay(), date.getHours(), date.getMinutes(), date.getSeconds(), date.getMilliseconds())}}) }) 

Я использую

col.find().forEach(){ col.update() } 

потому, что вам нужно старую дату документа, если не заморачиваться со старой датой, вы можете использовать

db.so.update({}, {$set: {date: new Date()}}) 

или даже лучше использовать $ currentDate оператор

db.so.update({}, {$currentDate: {date: {$type: 'date'}}}) 

Re ad more in mongo doc $currentDate

+0

Это замечательно. Но я понял, что мне нужно будет увеличивать его, когда я продолжу. Будет ли 'date.setSeconds (date.getSeconds + 10)' работать? –

+0

Да, mongo repl является узлом repl, который является javascript repl –

+0

На самом деле нет, мне не нужна текущая дата. Нужно превратить '1970-01-01 00: 00: 00.000Z' в' 1970-06-22 00: 00: 00.000Z' и увеличить 10 секунд в каждой записи –

Смежные вопросы