MongoDB:如何从集合中获取最新文档的时间戳和ObjectID?
MongoDB是一个非关系型数据库,它的_id字段中存储了关于日期的信息。时间戳包含在mongoDB id的前4个字节中。
您可以使用ObjectId.getTimestamp()函数从文档的_id字段中获取时间。
对存储ObjectId值的_id字段进行排序,大致等同于按创建时间排序。
下面的问题是如何从集合中获取最新文档的时间戳和ObjectId。
首先,可以使用以下代码来获取最新的时间戳和ObjectId:
// 获取最新的时间戳
db.collection.find().sort({ '_id': -1}).limit(1).forEach(
function(doc){
lastTimeStamp = doc._id.getTimestamp();
}
)
// 获取最新的ObjectId
db.collection.find().sort({ '_id': -1}).limit(1).forEach(
function(doc){
lastObjectId = doc._id;
}
)
然后,为了获取昨天插入的所有记录,需要进行一些工作。需要提取昨天插入的所有记录,并从中提取所需的信息:
// 获取昨天的起始时间和结束时间 var yesterdayStart = new Date(); yesterdayStart.setDate(yesterdayStart.getDate() - 1); yesterdayStart.setHours(0,0,0,0); var startId = Math.floor(yesterdayStart.getTime() / 1000).toString(16) + "0000000000000000"; var yesterdayEnd = new Date(); yesterdayEnd.setDate(yesterdayEnd.getDate() - 1); yesterdayEnd.setHours(23,59,59,999); var endId = Math.floor(yesterdayEnd.getTime() / 1000).toString(16) + "0000000000000000"; var lastTimeStampArray = []; var lastObjectIdsArray = []; db.collection("records") .find( { _id: { $gte: ObjectId(startId), $lte: ObjectId(endId) } } ).forEach( function(doc){ lastObjectIdsArray.push(doc._id); lastTimeStampArray.push(doc._id.getTimestamp()); });
这些是Mongo shell命令,您可以根据需要编写相应的Node.js代码。