[英]Get results of request with sort and limit using pymongo
让我们以2个文档作为这个简单的集合col
:
{
"_id" : ObjectId("5ca4bf475e7a8e4881ef9dd2"),
"timestamp" : 1551736800,
"score" : 10
}
{
"_id" : ObjectId("5ca4bf475e7a8e4881ef9dd3"),
"timestamp" : 1551737400,
"score" : 12
}
要访问上一个时间戳(第二个文档中的一个),我首先执行了此请求
a = db['col'].find({}).sort("_id", -1)
然后a[0]['timestamp']
但是由于此集合中将有很多文档,我认为只请求带有limit函数的最后一个文档会更有效,例如
a = db['col'].find({}).sort("_id", -1).limit(1)
接着
for doc in a:
lastTimestamp = doc['timestamp']
因为只有一个,所以我可以在循环内声明变量。
所以三个问题:
谢谢 ! Python 3.6 / Pymongo 3.7
如果在选择条件中使用具有唯一索引的任何字段,则应使用find_one
方法,该方法将返回唯一与查询匹配的文档。
就是说, find
方法返回一个Cursor对象,并且不会将数据加载到内存中。
如果使用过滤器选项,则可能会获得更好的性能。 您现在的查询将进行集合扫描。
如果您不使用过滤器,并且想检索最后一个文档,那么干净的方法是使用Python内置的next
函数。 您也可以使用next
方法。
cur = db["col"].find().sort({"_id": -1}).limit(1):
with cur:
doc = next(cur, None) # None when we have empty collection.
find()。sort()是如此之快,不必担心速度,它是访问游标第一个元素的最佳途径。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.