【问题标题】:How to Filter large data when using skip and limit in MongoDB在MongoDB中使用skip和limit时如何过滤大数据
【发布时间】:2020-08-01 03:35:35
【问题描述】:

我有一个在 Python 中使用 MongoDB 的跳过和限制函数的应用程序。它根据从服务器返回的内容获取数据,并且每次将跳过和限制增加 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

【问题讨论】:

  • 能否提供样本数据?
  • 将过滤器放在聚合中的限制之前。
  • @Joe 我没听懂你

标签: python database mongodb pymongo


【解决方案1】:

您现在的查询是:

  • 应用过滤器 C(国家/地区)
  • 获取匹配过滤器C的前10个项目
  • 应用过滤器 P(价格)(假设 2 项匹配)
  • 向用户显示匹配两个过滤器的 2 个项目

你想要:

  • 将两个过滤器(C 和 P)应用于整个集合
  • 获取匹配两个过滤器的前 10 个项目
  • 向用户展示它们

要实现这一点,您还需要在服务器上按 P 进行过滤。试试:

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

您需要使用 MongoDB 查询语言 (MQL) 而不是 Python 运算符在此处指定您的条件。

【讨论】:

  • 谢谢!所以如果我想对整个集合中的数据进行排序,我会在我的 find() 之后使用排序函数,例如 -> find().sort().skip().limit() 吗?
  • 另外,当在 find() 中提供过滤器时,即使有少于 100 个项目的数据也会返回给我空集合
  • 您在 Python 过滤器中将价格转换为 int。确保将值存储为 MongoDB 中的整数。
猜你喜欢
  • 1970-01-01
  • 2015-07-29
  • 2012-06-19
  • 2018-08-18
  • 2019-10-11
  • 1970-01-01
  • 2016-08-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多