我已經創建並想要現在導入一個虛擬集合。每個項目中的一個字段是「創建」和「更新」字段。我可以放在源/ json文件中,以便MongoDb將當前日期和時間用作導入時的值?MongoDb時間戳
這不會工作
"created" : Date()
我已經創建並想要現在導入一個虛擬集合。每個項目中的一個字段是「創建」和「更新」字段。我可以放在源/ json文件中,以便MongoDb將當前日期和時間用作導入時的值?MongoDb時間戳
這不會工作
"created" : Date()
mongoimport
旨在爲CSV,TSV,或JSON格式的數據導入現有數據。如果你想插入新的字段(例如created
時間戳),你將不得不爲它們設置一個值。
例如,如果你想在created
時間戳設置爲當前時間,你可以得到命令行Unix時間戳(這將是自紀元秒):
$ date +%s
1349960286
的JSON <date>
representation說mongoimport
預計是一個64位有符號整數,表示自紀元以來的毫秒數。您需要在1000乘以unixtime秒值,並在您的JSON文件:
{ "created": Date(1349960286000) }
另一種方法是,他們已經插入後所創建的時間戳添加到文件。
例如:
db.mycoll.update(
{created: { $exists : false }}, // Query criteria
{ $set : { created: new Date() }}, // Add 'created' timestamp
false, // upsert
true // update all matching documents
)
如果該字段是ISODate,那該怎麼辦?我注意到Date(timestamp)產生一個字符串,ISODate(sametimestamp)產生了一個完全不同且意外的日期。如何從字符串轉換爲ISODate格式? – Ketema
['ISODate()'函數](https://github.com/mongodb/mongo/blob/v2.2/src/mongo/shell/utils.js#L400)是創建'Date( )'對象。 'ISODate()'構造函數需要一個ISO8601風格的日期/時間字符串,而'Date()'需要一個unixtime(自紀元以來的秒數)。如果你在'mongo' shell中嘗試'new Date()'和'new ISODate()',你會發現它們都產生相同的值(一個'ISODate')。兩種格式都有相同的[BSON表示法](http://bsonspec.org/#/specification),這是一個UTC日期時間。 – Stennie
由於Stennie正確地指出,你不能只mongoimport
或mongorestore
做到這一點:他們只是恢復您以前轉儲的數據。正確的做法是恢復數據,然後對恢復的數據進行更新。
使用新的mongo 2.6,您可以使用$currentDate操作輕鬆完成此操作,該操作用於將時間更新爲當前時間戳。
在你的情況,你需要像
db.users.update(
{},
{
$currentDate: {
created: true,
updated: true
},
}
)
你有沒有試過'新的Date()'? – udidu
當我嘗試「新日期()」 – Simba
你說什麼'源/ json文件'意味着我得到一個失敗解析JSON字符串錯誤? – udidu