python - 使用python从mongodb中仅获取基于过滤器的特定字段
问题描述
from datetime import date, timedelta
sdate = date(2021, 7, 15) # start date
edate = date(2021, 8, 29) # end date
delta = edate - sdate # as timedelta
a=[]
for i in range(delta.days + 1):
day = sdate + timedelta(days=i)
a.append(day)
b=[]
for i in range(len(a)):
b.append(str(a[i]))
#b 是日期列表
import urllib.parse
import pandas as pd
from pymongo import MongoClient
host= "hostname" ; Port= "27017"
username = urllib.parse.quote_plus('username')
password = urllib.parse.quote_plus("admin123")
client = MongoClient('mongodb://%s:%s@servername/?authSource=admin' % (username, password))
db = client["my_db"]
col = db["region_report"]
data_report=[]
#到这里一切都很好
for i in range (len(b)):
data_report.extend(col.find({'Day': b[i],'Brand': 'brand_name'}))
在“data_report”中,我得到了完整的表格,其中包括基于应用过滤器的所有字段,如 Day、name、State_name、Skill、Brand 等,其中“Day”和“Brand”匹配但我只需要“State_name”列进行搜索因为带来完整的数据并过滤它需要时间。
data_report=pd.DataFrame(data_report)
output_data=set(data_report["State_name"])
这是我当前的代码,我如何从整个数据中提取“State_name”,这既不高效又耗时。所以我正在寻找更优化的 mongodb 查询。
解决方案
x=[]
for i in range (len(b)):
x.extend(col.find({'Day': b[i],'Brand': 'Brand_name'},{"State_name":1}))
这里 {'Day': b[i],'Brand': 'Brand_name'} 是检查数据是否符合过滤方案的过滤器, {"State_name":1} 表示要搜索的列,然后我们可以在存储数据的地方使用“x”。
推荐阅读
- http - 如何在詹金斯的脚本代码中添加允许的方法签名
- python - 减少 Django 视图和表单中的代码量
- ios - 用一个开关切换两个枚举
- excel - 循环遍历范围内的每个单元格,更快地替换值并添加评论
- php - 在第 3 方插件的快速视图中隐藏价格并添加到购物车按钮
- kotlin - Dagger 2 @Singleton 在 LibGDX (kotlin) 中不起作用
- r - 在 R 中循环以更改数据框列的类别
- javascript - Postgres:将 pg_notify 与 `node-postgres` Javascript 库一起使用时未收到有效负载
- java - 如何以编程方式选择 ClientRegistration
- node.js - PM2 在进程崩溃后启动一个新的守护进程并且不重新启动进程