2014-01-23 65 views
2

我有以下元數據的圖像:如何通過文件元數據從GridFS中刪除圖像文件?

> db.fs.files.find().pretty() 
{ 
    "_id" : ObjectId("4576874577342672346"), 
    "chunkSize" : 262144, 
    "user_name" : "my name", 
    "filename" : "image.jpg", 
    "length" : 7103, 
    "uploadDate" : ISODate("2014-01-23T13:31:48.155Z"), 
    "user_email" : "[email protected]", 
    "md5" : "1234567890" 
} 
> 

我想刪除的Python(PyMongo)的圖像。

delete()的文件似乎規定在delete()功能唯一可以接受的參數是file_id

http://api.mongodb.org/python/current/api/gridfs/#gridfs.GridFS.delete

編程,我有可用,可以在文件的元數據進行匹配以下值:

  • USER_NAME
  • USER_EMAIL

我怎麼可以:

  • 獲取file_id(通過使用上述值,如果有必要的)或
  • 刪除基於比file_id其他元數據字段的文件嗎?

此外,我目前只用單塊文件測試,如果有更大的文件,今後將刪除交互通過file_id或其他元數據刪除所有相關的塊呢?

回答

1

這是我剛剛嘗試過的一些事情,但沒有想到它是否有必要或最好的方法,但它的工作原理。

所以編程我能有_id提供查詢的文件的元數據:

Python Shell中:

>>> import pymongo 
>>> import os 
>>> hostname = os.environ['OPENSHIFT_MONGODB_DB_URL'] 
>>> conn = pymongo.MongoClient(host=hostname) 
>>> db = conn.grid_files 
>>> collection = db.fs.files 
>>> result = collection.find_one({"user_email":"[email protected]","name":"my name","filename":"image.jpg"}) 
>>> result['_id'] 
ObjectId('52e119c47091447a86891d98') 

# now use the _id to delete the file 
>>> files_id = result['_id'] 
>>> import gridfs 
>>> fs = gridfs.GridFS(db) 
>>> fs.delete(files_id) 
+2

是,這種方法工作得很好。 'GridFS'實際上只是一個映射到普通MongoDB集合的約定(默認情況下'fs.files'與'fs.chunks'具有1:多關係)。由於您正在使用GridFS模塊提供的'fs.delete(_id)'方法,因此它將從兩個集合中刪除所有關聯的數據。 – Stennie

+0

感謝您的澄清和額外的信息。 – user1063287