Mongo 将时间戳转换为日期
Mongo converting timestamp to date
我在 mongo 中还是新手,但我在 mongo 集合中有一个结构如下的数据:
{
"_id" : ObjectId("5f79931104a8f102f761398e"),
"data1" : "This is a data",
"data2" : "This is a data",
"timeStampVar" : Timestamp(1603377200, 0),
},
目前我正在尝试使用 timeStampVar 获取过去 14 天内的数据。到目前为止我的代码是这样的:
var yesterdayStart = new Date();
yesterdayStart.setDate(yesterdayStart.getDate() - 14);
yesterdayStart.setUTCHours(0,0,0,0);
var yesterdayEnd = new Date();
yesterdayEnd.setDate(yesterdayEnd.getDate() - 1);
yesterdayEnd.setUTCHours(23,59,59,999);
db.collection_name.aggregate([{
"$addFields": {
"date": {"$toDate": "$timeStampVar"}
}
},
{
"$match": {
"date": { $gte: yesterdayStart, $lte: yesterdayEnd},
}
},
])
我在尝试使用 $toDate 将 10 位数字时间戳转换为日期对象时遇到问题。正如它所说:
{
"message" : "Unsupported conversion from timestamp to date in $convert with no onError value",
"ok" : 0,
"code" : 241,
"codeName" : "ConversionFailure",
"name" : "MongoError"
}
我是不是漏掉了什么?在 $toDate 的 mongo 文档中,我看到示例使用的是 13 位时间戳,难道它不支持 10 位时间戳吗?
https://docs.mongodb.com/manual/reference/operator/aggregation/toDate/
提前致谢
每当必须使用 javascript 中的 Date/Time 值时,我推荐 Moments.js 库。它让你的生活更轻松。
会是这样的:
{
"$match": {
"date": {
$gte: moment().subtract(14,'days'),startOf('day').toDate(),
$lte: moment().subtract(1,'days'),endOf('day').toDate(),
},
}
}
看看Timestamps:
Note
The BSON timestamp
type is for internal MongoDB use. For most cases, in application development, you will want to use the BSON date
type. See Date for more information.
我在 mongo 中还是新手,但我在 mongo 集合中有一个结构如下的数据:
{
"_id" : ObjectId("5f79931104a8f102f761398e"),
"data1" : "This is a data",
"data2" : "This is a data",
"timeStampVar" : Timestamp(1603377200, 0),
},
目前我正在尝试使用 timeStampVar 获取过去 14 天内的数据。到目前为止我的代码是这样的:
var yesterdayStart = new Date();
yesterdayStart.setDate(yesterdayStart.getDate() - 14);
yesterdayStart.setUTCHours(0,0,0,0);
var yesterdayEnd = new Date();
yesterdayEnd.setDate(yesterdayEnd.getDate() - 1);
yesterdayEnd.setUTCHours(23,59,59,999);
db.collection_name.aggregate([{
"$addFields": {
"date": {"$toDate": "$timeStampVar"}
}
},
{
"$match": {
"date": { $gte: yesterdayStart, $lte: yesterdayEnd},
}
},
])
我在尝试使用 $toDate 将 10 位数字时间戳转换为日期对象时遇到问题。正如它所说:
{
"message" : "Unsupported conversion from timestamp to date in $convert with no onError value",
"ok" : 0,
"code" : 241,
"codeName" : "ConversionFailure",
"name" : "MongoError"
}
我是不是漏掉了什么?在 $toDate 的 mongo 文档中,我看到示例使用的是 13 位时间戳,难道它不支持 10 位时间戳吗?
https://docs.mongodb.com/manual/reference/operator/aggregation/toDate/
提前致谢
每当必须使用 javascript 中的 Date/Time 值时,我推荐 Moments.js 库。它让你的生活更轻松。
会是这样的:
{
"$match": {
"date": {
$gte: moment().subtract(14,'days'),startOf('day').toDate(),
$lte: moment().subtract(1,'days'),endOf('day').toDate(),
},
}
}
看看Timestamps:
Note
The BSON
timestamp
type is for internal MongoDB use. For most cases, in application development, you will want to use the BSONdate
type. See Date for more information.