Подтвердить что ты не робот

Как обновить поле даты в консоли mongo?

Например, я хочу обновить все записи до '2012-01-01' ( "время": ISODate ( "2011-12-31T13: 52: 40Z" )).

db.test.update( { time : '2012-01-01' }, false, true  )

Ошибка возврата:

Assert failed : need an object
Error("Printing Stack Trace")@:0
()@shell/utils.js:35
("assert failed : need an object")@shell/utils.js:46
(false,"need an object")@shell/utils.js:54
([object Object],false,true)@shell/collection.js:189
@(shell):1

Wed Jan 11 17:52:35 uncaught exception: assert failed : need an object
4b9b3361

Ответ 1

Вам нужно создать новый объект ISODate, например:

db.test.insert({"Time" : new ISODate("2012-01-10") });

Это верно как для обновлений, так и для запросов. Обратите внимание, что ваш синтаксис запроса неверен, он должен быть

db.test.update({ criteria }, { newObj }, upsert, multi);

Например, чтобы обновить все объекты, рассмотрите

db.test.update( {}, { $set : { "time" : new ISODate("2012-01-11T03:34:54Z") } }, true, true);

Также обратите внимание, что это сильно отличается от

db.test.update( {}, { "time" : new ISODate("2012-01-11T03:34:54Z") }, true, false);

потому что последний будет заменить объект, а не добавлять новое поле в существующий документ или обновлять существующее поле. В этом примере я изменил последний параметр на false, потому что несколько обновлений работают только с операторами $.

Ответ 2

Если вам нужно преобразовать существующее поле даты (импортированное из формата MySQL "yyyy-mm-dd" f.e.) в ISODate, вы можете пропустить эти документы так:

/usr/bin/mongo yourdbname --eval "db.yourcollectionname.find().forEach(function(doc){doc.yourdatefield = new ISODate(doc.yourdatefield);db.yourcollectionname.save(doc)});"

Ответ 3

Вы можете сделать это в старой школе, создав дату ISO

  db.test.update({_id : 1}, {
      $set : {
         "time" : new ISODate("your current date")
      }
  });

Но обратите внимание, что с новым Mongo 2.6 вы сможете легко обновить дату до текущей даты с помощью $currentDate.

db.test.update( { _id: 1 }, {
  $currentDate: {
      time: true,
  },
})