目前我正在尝试使用timeStampVar获取过去14天的数据。到目前为止,我的代码如下:
尝试使用$toDate将10位时间戳转换为日期对象时遇到问题。正如它所说:
提前感谢
我在mongo中还是个新手,但我在mongocollection中有一个数据结构如下:
{
"_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中的日期/时间值时,我推荐Moments.js库。它让你的生活更轻松。
会是这样的:
{
"$match": {
"date": {
$gte: moment().subtract(14,'days'),startOf('day').toDate(),
$lte: moment().subtract(1,'days'),endOf('day').toDate(),
},
}
}
看看时间戳:
注意
BSON
timestamp
类型用于内部MongoDB使用。在大多数情况下,在应用程序开发中,您将希望使用BSONdate
类型。有关详细信息,请参阅日期。