簡體   English   中英

Pymongo:有沒有辦法在獲取數據時在同一個調用中使用查找和聚合

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM