2012-01-11 19 views
29

Ad esempio, desidero aggiornare tutti i record a "2012-01-01" ("ora": ISODate ("2011-12-31T13: 52: 40Z")).Come aggiornare il campo data nella console mongo?

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

errore di ritorno:

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

Qual è l'errore? –

risposta

47

È necessario creare un nuovo ISODate oggetto come questo:

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

Questo è vero sia per gli aggiornamenti e per le query. Si noti che la sintassi di query non è corretta, dovrebbe essere

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

Ad esempio, per aggiornare tutti gli oggetti, in considerazione

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

Si noti inoltre che questo è molto diverso da

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

perché il secondo sarà sostituire l'oggetto anziché aggiungere un nuovo campo al documento esistente o aggiornare il campo esistente. In questo esempio, ho modificato l'ultimo parametro in false, poiché gli aggiornamenti multipli funzionano solo con gli operatori $.

2

Se avete bisogno di convertire un campo data esistente (importati dalla disposizione di MySQL 'aaaa-mm-dd' fe) per isodate è possibile scorrere i documenti in questo modo:

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

È possibile farlo in il modo vecchia scuola con la creazione di data ISO

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

Ma nota che con il nuovo Mongo 2.6 si sarà in grado di aggiornare la data per una data corrente davvero facile con $currentDate.

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