【问题标题】:How can I sample within an id range in Pymongo?如何在 Pymongo 的 id 范围内采样?
【发布时间】:2019-02-18 22:14:03
【问题描述】:

我读过this docthis blog,了解到我可以这样采样:

db.collection.aggregate([  
        { $sample: {size: 20} }, 
        { $match:  {"yourField": valueOrSpecifier} } 
      ])

然后我写了我的:

db.collection.aggregate([  
        {"$sample": {"size": 20}}, 
        {"$match": {"_id": {"$gt": 50, "$lt": 100}}}
      ])

抽取 20 个 _id 介于 50 到 100 之间的文档。

但是我得到了一个空的生成器。我检查了集合,有 49 个样本满足这个限制。

【问题讨论】:

  • 为什么在$match 之后不使用$sample 阶段?

标签: database python-3.x mongodb pymongo


【解决方案1】:

流水线阶段的顺序在这里真的很重要。当您在$match 之前使用$sample 时,它会过滤来自$sample 阶段中​​找到的20 个文档的数据。

如果您在$sample 之前使用$match,那么它将从数据库内的所有集合中过滤第一个文档,并在`$sample 阶段抛出20 个文档。

所以最后你的管道应该是这样的

db.collection.aggregate([  
  { "$match": { "_id": { "$gt": 50, "$lt": 100 }}},
  { "$sample": { "size": 20 }}
])

【讨论】:

    猜你喜欢
    • 2018-03-11
    • 2012-08-06
    • 1970-01-01
    • 2020-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    相关资源
    最近更新 更多