Как фильтровать большие данные при использовании пропуска и ограничения в MongoDB - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть приложение, которое использует функции пропуска и ограничения MongoDB в Python. Он выбирает данные на основе того, что возвращается с сервера, и увеличивает пропуск и ограничение каждый раз на 10. Однако когда я пытался реализовать механизм фильтрации в своем приложении, фильтрация применяется только к этим десяти элементам, которые мне возвращают. Может кто-нибудь сказать мне, как я могу получить отфильтрованные данные, которые выполняются по всем данным, которые требуют фильтрации, а не только по десяти элементам? Мне нужно иметь возможность получить эти данные в форме пропуска и ограничения. Кажется, я не могу прийти в себя, пытаясь добиться этого.

Вот пример функции, которую я использую для сортировки по контексту

@app.route('/api/belowhundred/<country>/<skip>/<limit>',methods=['POST'])
def belowhundred(country,skip,limit):
products = db_products.find({'country':country}).skip(int(skip)).limit(int(limit))
prods = []
for product in products:
    if int(product['price']) <= 100:
        prods.append(product)
products = dumps(prods)
return products

1 Ответ

1 голос
/ 18 апреля 2020

Ваш запрос сейчас:

  • Применить фильтр C (страна)
  • Получить первые 10 элементов, соответствующих фильтру C
  • Применить фильтр P (цена) (скажем, совпадают 2 элемента)
  • Показать пользователю 2 элемента, соответствующие обоим фильтрам

Вы хотите:

  • Применить оба фильтры (C и P) ко всей коллекции
  • Получите первые 10 элементов, которые соответствуют обоим фильтрам
  • Покажите их пользователю

Для этого вам также нужно фильтровать по P на сервере. Попробуйте:

find({'country':country, 'price': {'$lt': 100}})

Вам нужно использовать язык запросов MongoDB (MQL) вместо Python операторов, чтобы указать здесь ваши условия.

...