【问题标题】:Get every other N documents with pymongo使用 pymongo 获取每隔 N 个文档
【发布时间】:2018-11-21 01:25:53
【问题描述】:

我有一个名为 stats 的 MongoDB 服务器统计数据集。

每 10 分钟向此集合添加一个文档,其中包括一些统计信息和时间戳。

假装我有这个收藏:

{"id": "something", "ts"=1}
{"id": "something", "ts"=2}
{"id": "something", "ts"=3}
{"id": "something", "ts"=4}
{"id": "something", "ts"=5}
{"id": "something", "ts"=6}
{"id": "something", "ts"=7}
{"id": "something", "ts"=8}

我想检索所有其他 N 文档。以N = 2 为例:

{"id": "something", "ts"=1}
{"id": "something", "ts"=3}
{"id": "something", "ts"=5}
{"id": "something", "ts"=7}

N = 3 为例:

{"id": "something", "ts"=1}
{"id": "something", "ts"=4}
{"id": "something", "ts"=7}

在 pymongo 中进行此操作的快速有效的方法是什么?

【问题讨论】:

    标签: python database python-3.x mongodb pymongo


    【解决方案1】:

    您可以使用$expr$mod 做到这一点:

    db.test.find({$expr: {$eq: [1, {$mod: ['$ts', N]}]}})
    

    $expr 是 v3.6 中引入的查询运算符,允许您在 find 查询中使用聚合查询表达式,如 $mod(模数)。

    【讨论】:

    • 等一下,也许我的样本数据具有误导性。 ts 将是一个时间戳,并不保证总是加一。无论如何不使用ts 键可以做到这一点?
    • 除非您的文档中有其他内容可以关闭。
    • @Qwerty 如果您无法关闭ts,那么您的问题是stackoverflow.com/questions/50509896/… 的欺骗。如果您更新您的问题以显示您的实际文件,这会有所帮助。
    猜你喜欢
    • 2016-11-07
    • 2021-10-07
    • 2016-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多