首页 > 解决方案 > 使用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 查询。

标签: pythonmongodb

解决方案


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”。


推荐阅读