2012-01-11 8 views
29

たとえば、すべてのレコードを '2012-01-01'( "time":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({}, { $set : { "time" : new ISODate("2012-01-11T03:34:54Z") } }, true, true); 

はまた、これは理由

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

とは非常に異なっていることに注意して検討し、すべてのオブジェクトを更新するには、クエリの構文が間違っている、それは例えば

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

でなければならないことに注意してください後者はをオブジェクトに置き換えます。既存のドキュメントに新しいフィールドを追加したり、既存のフィールドを更新したりすることはありません。この例では、最後のパラメータをfalseに変更しました。これは、複数の更新が$の演算子でのみ機能するためです。既存の日付フィールドを変換する必要がある場合

2

あなたをISODateする(MySQLのフォーマット「YYYY-MM-DD」FEから輸入)することができますこの方法でドキュメントをループ:

/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, 
    }, 
}) 
関連する問題