MongoDB:如何从集合中的最新文档中获取时间戳和ObjectID?

时间:2018-10-22 12:46:43

标签: node.js mongodb

我想获取集合中最后创建的文档,并返回其objectID和时间戳。例如,如果昨天我创建了10个文档,我想用db.collection然后

返回它们
const lastTimeStamp = will be the timestamp from the last created element

const lastTimeStampArray = will be array of timestamps from yesterdays records

const lastObjectId = will be ObjectID of last created document

const lastObjectIdsArray = array of last objectIds

我正在使用:

2 个答案:

答案 0 :(得分:2)

MongoDB的_id字段本身具有有关日期的信息。时间戳记包含在mongoDB id的前4个字节中。

  • 您可以使用ObjectId.getTimestamp()功能从文档_id中获取时间。
  • 在存储ObjectId值的_id字段上排序大致等同于按创建时间排序。

对于您的问题:

// To get lastTimeStamp
db.collection.find().sort({ '_id': -1}).limit(1).forEach( 
   function(doc){ 
      lastTimeStamp = doc._id.getTimestamp(); 
   }
)


// to get lastObjectId
db.collection.find().sort({ '_id': -1}).limit(1).forEach( 
   function(doc){ 
       lastObjectId = doc._id; 
   }
)

现在,要获取昨天插入的所有记录,可能会有些艰苦。您需要提取昨天插入的所有记录,并从中提取所需的信息。

// to get lastTimeStampArray and lastObjectIdsArray
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。

答案 1 :(得分:0)

您可以使用以下命令获取带有时间戳的最后插入记录:

db.collection.find().sort({ '_id': -1 }).limit(1).forEach(
     function(doc){
         print("record:"+doc._id.getTimestamp());
})

_id 是Mongodb对象ID