這是預期的結果。原因是在插入(放入)過程中,您沒有爲字段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
返回「文件名」值的列表。