2016-08-04 1 views
0

J'utilise GridFS comme suit:objet fichier GridFS

connection = MongoClient(host='localhost') 
db = connection.gridfs_example 
fs = gridfs.GridFS(db) 
fileId = fs.put("Contents of my file", key='s1') 

Une fois les fichiers sont stockés dans l'origine GridFS, j'ai un processus qui calcule des métadonnées supplémentaires correspondant au contenu du fichier.

def qcFile(fileId): 
    #DO QC 
    return "QC PASSED" 

qcResult = qcFile(fileId) 

Il aurait été bien si je pouvais faire:

fs.update(fileId, QC_RESULT = qcResult) 

Mais cette option ne semble pas exister dans la documentation. J'ai trouvé here (la question mise à jour avec la solution) que le pilote Java semble offrir une option pour faire quelque chose comme ça mais ne trouve pas son équivalent dans python gridfs. Alors comment utiliser pymongo pour marquer mon fichier avec la nouvelle valeur de métadonnées qcResult? Je ne peux pas le trouver dans le documentation.

Répondre

3

GridFS stocke les fichiers dans deux collections: 1. fichiers collection: magasin de métadonnées 2. morceaux: collection de stocker des fichiers de fichiers de données binaires

Vous pouvez pirater la collection de fichiers. Le nom de la collection de fichiers est 'fs.files' où 'fs' est le nom du compartiment par défaut.

Ainsi, pour mettre à jour le résultat QC, vous pouvez faire comme ceci:

db.fs.files.update({'_id': fileId}, {'$set': {'QC_RESULT': qcResult}})

+0

Merci - c'est super. Savez-vous pourquoi cette méthode n'est pas disponible sur l'API GridFS - est-ce dû à des considérations de performances? – Spade