如何查询pymongo并按插入的相反顺序获取值

时间:2012-10-09 13:46:48

标签: pymongo

我想以插入的相反顺序实现一个需要来自pymongo集合的值的函数。

我可以想到几种方法:

cursor = collection.find(skip=collection.count()-LIMIT_VAL,limit=LIMIT_VAL)
rows = list(cursor).reverse()

这种方式有点不好,因为LIMIT_VAL是一个变量,我不想把整个东西都放到内存中。我不想为skip参数提供-ve值。

rows = collection.find(sort={'$natural':-1}, limit=LIMIT_VAL)

我读到here,你不能真正依赖自然排序。我不知道这怎么可能不可靠

我在每条记录中插入一个名为order_of_insert的值,并对其进行排序,以确保我了解我的插入方式。

在我实施之前,我需要确保哪种方式最好。

1 个答案:

答案 0 :(得分:1)

Mongodb ObjectIDs存储精确到秒的时间戳信息。 $ natural按此_id排序。如果您的应用要在同一秒内插入文档,则插入顺序将不明确。只有当您的集合有上限时,$ natural才会对应于广告订单。

  1. 如果您的应用程序可以容忍大部分准确的广告订单,并且您需要数据永久保留,请使用$ natural而不限制该集合。
  2. 如果您需要准确的广告订单并且数据集是小型/半持久性的,请限制集合并使用$ natural sorting
  3. 否则看起来您需要对自己的时间戳或其他字段进行排序以跟踪订单。