[英]Pymongo : Is there a way to using find and aggregate in same call while fetching data
擁有一個包含 105 列的 100 萬條記錄的數據庫
對於查找,我將使用它並將其轉換為 df
data=mydb.data.find({ "$and": [ {"age" : {"$gte" : "35", "$lte" : "60"}} ]
data = pd.DataFrame(list(data))
並且僅投影所需的列,我正在使用它:
data=mydb.data.aggregate([
{
'$project': {
'name': '$name',
'age': '$age'
}
}
])
data = pd.DataFrame(list(data))
這兩個是兩個單獨的調用。 有沒有辦法把這兩個電話合二為一。
如果要在find()
操作上進行投影,可以將投影參數作為第二個參數傳遞。
mydb.data.find({ "$and": [ {"age" : {"$gte" : "35", "$lte" : "60" } } ] }, { "name": True, "age": True })
或者
mydb.data.find({ "$and": [ {"age" : {"$gte" : "35", "$lte" : "60" } } ] }, ["name", "age"])
您還可以使用$match
階段在聚合管道中使用過濾器。
mydb.data.aggregate([
{
'$match': { '$and': [ {'age' : {'$gte' : '35', '$lte' : '60' } } ] }
},
{
'$project': {
'name': '$name',
'age': '$age'
}
}
])
當然, 投影參數正好允許這樣做。
data=mydb.data.find({ "$and": [ {"age" : {"$gte" : "35", "$lte" : "60"}} ]}, {'name': 1, 'age': 1, '_id': 0})
工作示例:
from pymongo import MongoClient
import pandas as pd
db = MongoClient()['mydatabase']
db.mycollection.insert_one({'name': 'Foo', 'age': '40', 'address': 'bar'})
cursor = db.mycollection.find({ "$and": [ {"age" : {"$gte" : "35", "$lte" : "60"}} ]}, {'name': 1, 'age': 1, '_id': 0})
data = pd.DataFrame(list(cursor))
print(data)
給出:
name age
0 Foo 40
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.