Как я могу сэмплировать в пределах диапазона идентификаторов в Pymongo? - PullRequest
0 голосов
/ 14 сентября 2018

Я прочитал этот документ и этот блог и узнал, что я могу сделать выборку следующим образом:

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

Затем я написал мой:

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

для выборки 20 документов, чьи _ids находятся между 50 и 100.

Но я получаю пустой генератор.Я проверил коллекцию, и есть 49 образцов, удовлетворяющих этому ограничению.

1 Ответ

0 голосов
/ 14 сентября 2018

Здесь действительно важен порядок этапов трубопровода.Когда вы используете $sample перед $match, тогда он фильтрует данные из 20 документов, найденных в $samplestage.

И если вы будете использовать $match перед $sample, тогда он отфильтруетпервый документ из всей вашей коллекции внутри базы данных и выбросит 20 документов на этапе `$ sample.

Итак, наконец, ваш конвейер должен выглядеть примерно так:

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