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

16 浏览
0 Comments

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

我想获取集合中最近创建的文档,并返回它们的对象ID和时间戳。例如,如果昨天我创建了10个文档,我想通过db.collection返回它们,然后

const lastTimeStamp将是最后创建元素的时间戳
const lastTimeStampArray将是昨天记录的时间戳数组
const lastObjectId将是最后创建文档的对象ID
const lastObjectIdsArray将是最后的对象ID数组

我正在使用:

0
0 Comments

问题的原因是需要从MongoDB集合中获取最新文档的时间戳和ObjectID。解决方法是使用以下代码:

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

其中,_id 是MongoDB的ObjectID。

0
0 Comments

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代码。

参考来源:stackoverflow.com/questions/42456375/…

0