我需要在MongoDB中的一个集合中获取第一个插入的记录,我目前正在使用以下查询:
db.users.find({}).sort({"created_at":1}).limit(1);
但是,这会占用大量内存。该系列有大约100K的记录。
这样做的有效方法是什么?
答案 0 :(得分:1)
MongoDB _id是唯一标识符,它是在将文档插入MongoDB集合时自动生成的
_id字段存储ObjectId值并自动编入索引。
根据MongoDB文档,
12字节的ObjectId值包括:
4字节值,表示自Unix纪元以来的秒数,
3字节机器标识符,
2字节进程ID,
3字节计数器,以随机值开始。
根据上面提到的描述提取第一个插入的记录,请尝试执行以下mongodb find操作到MongoDB shell。
db.users.find({}).sort({"_id":1}).limit(1);
在上面的查询中,我们根据_id字段对结果进行了排序,因为_id对象ID值由unix纪元时间戳组成
答案 1 :(得分:0)
此外,您可以在查询中添加特定的过滤器以获取针对该条件插入的第一条记录:
例如,假设您收集的数据包含用于存储IT,ADMIN,财务部门的员工的数据,并且您要查找为IT插入的第一个文档(即第一位IT员工),则可以执行以下操作:
db.users.find({"Dept" : "IT"}).sort({"_id":1}).limit(1);
同样可以找到最后一个雇员:
db.users.find({"Dept" : "IT"}).sort({"_id":-1}).limit(1);
注意:对于较大的集合/分片集合,由于要遍历整个_id字段以进行升序和降序条件,因此将花费大量时间才能得到结果。