Как обновить поле даты в консоли Монго? - PullRequest
32 голосов
/ 11 января 2012

Например, я хочу обновить все записи до «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

Ответы [ 3 ]

52 голосов
/ 11 января 2012

Вам необходимо создать новый 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, потому что многократные обновления работают только с $ операторами.

4 голосов
/ 25 октября 2013

Вы можете сделать это по-старому, создав дату 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,
  },
})
2 голосов
/ 14 февраля 2013

Если вам нужно преобразовать существующее поле даты (импортированное из формата 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)});"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...