我已经创建并想要现在导入一个虚拟集合。每个项目中的一个字段是“创建”和“更新”字段。我可以放在源/ 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