2016-05-17 6 views
2

リスト機能を使用する以外に、GridFSに格納されているファイルの数をPyMongoで取得できますか?gridf "list"メソッドは、空でないコレクションの空リストを返します

また、私がgridfsの下でlist()メソッドを試してみると、DBにファイルがあるときに空のリストが表示されます。 _idを使用してget()メソッドを使用してファイルを取得することができます。 ファイル名を持たないファイルを保存し、その代わりに_id値に依存する場合、list()関数はgridfsdbに格納されているすべてのファイルのリストを返しますか?

コード:

client = pymongo.MongoClient(connect=False) 
grid_db = client['gridDB'] 
fs = gridfs.GridFS(grid_db) 
# Save an image 
img_identifier = fs.put(img, encoding="utf-8") 
# List the files stored 
print fs.list() 
'''[] Console shows empty array''' 

答えて

1

これは、予想される結果です。その理由は、挿入(put)中にフィールドfilenameの値を設定しなかったためです。listメソッドは、コレクションのfilenameフィールドのdistinctの値を返します。フィールドがコレクションに存在しない場合、空のリストを返します。 See the list() method implementation

def list(self): 
    """List the names of all files stored in this instance of 
    :class:`GridFS`. 
    .. versionchanged:: 3.1 
     ``list`` no longer ensures indexes. 
    """ 
    # With an index, distinct includes documents with no filename 
    # as None. 
    return [ 
     name for name in self.__files.distinct("filename") 
     if name is not None] 

デモ:あなたが見ることができるように

>>> import pprint 
>>> from pymongo import MongoClient 
>>> import gridfs 
>>> client = MongoClient() 
>>> db = client.demo 
>>> fs = gridfs.GridFS(db) 
>>> fs.put('img.jpg', encoding='utf-8') 
ObjectId('573af0960acf4555437ceaa9') 
>>> fs.list() 
[] 
>>> pprint.pprint(db['fs.files'].find_one()) 
{'_id': ObjectId('573af0960acf4555437ceaa9'), 
'chunkSize': 261120, 
'encoding': 'utf-8', 
'length': 7, 
'md5': '82341a6c6f03e3af261a95ba81050c0a', 
'uploadDate': datetime.datetime(2016, 5, 17, 10, 21, 11, 38000)} 

、フィールドfilenameは、ドキュメントに存在しません。今度はfilename引数に渡してみましょう:あなたが見ることができるように

>>> client.drop_database(db) # drop our demo database 
>>> fs.put('img.jpg', encoding='utf-8', filename='img.jpg') 
ObjectId('573af1740acf4555437ceaab') 
>>> fs.list() 
['img.jpg'] 
>>> pprint.pprint(db['fs.files'].find_one()) 
{'_id': ObjectId('573af1740acf4555437ceaab'), 
'chunkSize': 261120, 
'encoding': 'utf-8', 
'filename': 'img.jpg', 
'length': 7, 
'md5': '82341a6c6f03e3af261a95ba81050c0a', 
'uploadDate': datetime.datetime(2016, 5, 17, 10, 24, 53, 449000)} 

は、list「ファイル名」の値のリストを返します。

関連する問題