我正在进行测试,以确保我能正确获取日期。
我目前的测试是:选择mongodb ISODate格式的日期并转换为数值(自1970年以来的毫秒数),反之亦然
示例:
var date_test = ISODate ("2013-07-26T22:35:40.373Z")
这个日期的数值是多少? Wich命令用于获取此信息吗?
答案 0 :(得分:11)
只需调用getTime()
方法,即可获得1970/01/01以来的毫秒数
> var date_test = ISODate ("2013-07-26T22:35:40.373Z")
> date_test.getTime()
1374878140373
将毫秒转换为日期,构造一个新的日期对象:
> new Date(1374878140373)
ISODate("2013-07-26T22:35:40.373Z")
答案 1 :(得分:0)
从Mongo 4.0
开始,可以将$toLong
聚合运算符应用于Date
以获得时间戳:
// { mydate: ISODate("2019-06-23T15:52:29.576Z")
db.collection.aggregate({ $project: { timestamp: { $toLong: "$mydate" } } })
// { timestamp: NumberLong("1561305149576") }
,反之亦然,$toDate
:
// { timestamp: NumberLong("1561305149576") }
db.collection.aggregate({ $project: { mydate: { $toDate: "$timestamp" } } })
// { mydate: ISODate("2019-06-23T15:52:29.576Z") }
答案 2 :(得分:0)
如果仍然遇到问题,请将模型默认值定义为新的Date(),因为这会给您带来很长的时间。请参见下面的示例代码。然后,当您使用Java / Kotlin或任何语言时,始终可以更新long值。这样一来,您就可以跳过格式化日期。
var UserSchema = new Schema({
username: {
type: String,
unique: true
},
email: {
type: String,
required: true,
unique: true
},
code: {
type: String,
default: ''
},
profileUrl: {
type: String,
default: ''
},
firstName: {
type: String,
default: ''
},
lastName: {
type: String,
default: ''
},
coordinates: {
type: String,
default: '0.0,0.0'
},
location: {
type: String,
default: ''
},
country: {
type: String,
default: 'Tanzania, United Republic of'
},
phoneNumber: {
type: String,
default: ''
},
deviceToken: {
type: String,
default: ''
},
firebaseUserId: {
type: String,
default: ''
},
created: {
type: Date,
default: new Date()
},
region: {
type: String,
default: 'Dar es salaam'
},
role: {
type: String,
default: 'normal'
},
lastActiveDate: {
type: Date,
default: new Date()
}
});