2012-01-11 2 views
29

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

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 
+0

Какая ошибка? –

ответ

47

Вам нужно создать новый объект 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 «гггг-мм-дд» Fe) до ISODate вы можете перебрать документы таким образом:

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

Вы можете сделать это в старой школы способом путем создания даты 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, 
    }, 
}) 
Смежные вопросы