gridfs" list"方法返回非空集合的空列表

时间:2016-05-17 02:46:36

标签: python mongodb list pymongo gridfs

除了使用list函数之外,我们可以使用PyMongo获取GridFS中存储的文件数吗?

此外,当我在list()下尝试gridfs方法时,它会给我一个空列表,尽管数据库中有文件。能够使用get()使用_id方法检索文件。 如果我们保存没有文件名的文件并取决于gridfs值,list()函数是否会返回db _id下存储的所有文件的列表。

代码:

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 个答案:

答案 0 :(得分:1)

这是预期的结果。原因是您在插入(put)期间没有为字段filename设置值,但list方法返回filename字段中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] 字段的值采集。因此,如果集合中不存在该字段,则返回空列表。 distinct

>>> 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

如您所见,Response.Redirect(Request.CurrentExecutionFilePath());返回“文件名”值列表。