【问题标题】:performance loop while get data from gridFS从gridFS获取数据时的性能循环
【发布时间】:2017-03-17 07:38:44
【问题描述】:

我使用pymongo从gridFS获取数据,获取这些数据的循环真的很慢。

是否有可能避免该循环,或者有什么方法可以更快地做到这一点?

from pymongo import MongoClient
from pprint import pprint
import bson
from gridfs import GridFS
import json
import pandas as pd

client = MongoClient()

client.database_names()
db = client['MC']

fs = GridFS(db, collection="MC")

db.collection_names(include_system_collections=False)
collectionFiles = db['MC.files']
collectionChunk = db['MC.chunks']

files = db['MC.files'].find({"metadata.Feature0": "00011"})

for n in files:
    file_id = n['_id']
    chunks = db['MotorCalculo.chunks'].find({"files_id": file_id})
    bsondData = (fs.get(file_id).read())
    decData = bsondData.decode()
    jsonData = json.loads(decData)
    F1 = jsonData['Feature1']
    F2 = jsonData['Feature2']

【问题讨论】:

  • 那个循环是唯一的方法??

标签: mongodb pymongo gridfs


【解决方案1】:

如果你有足够的内存,访问文件组应该会更快,而不是对 mongo 进行太多调用。

你可以试试这样的:

batch_file_id = ['#1', '#2', '#3', '#4']
chunks = db['MotorCalculo.chunks'].find('{\"files_id\" : {\"$in\":[{\"$oid\":\"' + '\"}, {\"$oid\":\"'.join(batch_file_id) + '\"}]}}')

...

batch_file_id
Out[1]: ['#1', '#2', '#3', '#4']

'{\"files_id\" : {\"$in\":[{\"$oid\":\"' + '\"}, {\"$oid\":\"'.join(batch_file_id) + '\"}]}}'
Out[2]: '{"files_id" : {"$in":[{"$oid":"#1"}, {"$oid":"#2"}, {"$oid":"#3"}, {"$oid":"#4"}]}}'

问候!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-23
    相关资源
    最近更新 更多