如何在 GridFS 中更新 Saved Document Extra 数据
How to update Saved Document Extra data in GridFS
我在 gridFS 上存储了文件,这些文件存储了额外的信息 - 它没有在元数据上设置,否则我会使用
对于 Pymongo 3.2.2,我们将信息存储在与 fs.files 中实际数据相同的级别(不使用元数据)
例如我们有:
fs.files = [ {
_id, description, title, ...
}]
当我像这样调用 GridFS.put 时没有任何反应
FS = GridFS(mongo_,)
file.description = request_data.get('description', None)
FS.put(file)
如何更新该文件的额外信息,例如描述?
在不使用 GridFS 的情况下手动更新那些额外的字段:
file = mongo_.fs.files.find_one({'_id': ObjectId(fileId)})
file['description'] = request_data.get('description', None)
mongo_.fs.files.save(file)
您的代码示例中的 file
是什么?也就是说,你传递给 GridFS.put 的是什么?
要将元数据添加到 GridFS 文件,请将额外的关键字参数传递给 put
、as it shows in the PyMongo tutorial:
>>> fs.put(b'data', filename='foo', description='my description')
ObjectId('5825ea8ea08bff9df5059099')
现在元数据与您的数据一起存储在 GridFS 中:
>>> gridout = fs.get(ObjectId('5825ea8ea08bff9df5059099'))
>>> gridout.description
u'my description'
在幕后,您可以看到 PyMongo 将元数据存储在 MongoDB 中的 fs.files
集合中:
>>> for doc in db.fs.files.find()
... print(doc.get('description'))
...
my description
但是访问 GridFS 数据的更好方法是使用 PyMongo 的 GridFS API,而不是直接查询集合。
另一种存储元数据的方法是创建一个 GridIn,设置一个字段,然后调用 close
:
>>> gridin = fs.new_file()
>>> gridin.filename = 'foo'
>>> gridin.description = 'my description'
>>> gridin.write(b'data')
>>> gridin.close()
如果您需要使用数据块多次调用 write
,这是一个不错的选择。
我在 gridFS 上存储了文件,这些文件存储了额外的信息 - 它没有在元数据上设置,否则我会使用
对于 Pymongo 3.2.2,我们将信息存储在与 fs.files 中实际数据相同的级别(不使用元数据)
例如我们有:
fs.files = [ {
_id, description, title, ...
}]
当我像这样调用 GridFS.put 时没有任何反应
FS = GridFS(mongo_,)
file.description = request_data.get('description', None)
FS.put(file)
如何更新该文件的额外信息,例如描述?
在不使用 GridFS 的情况下手动更新那些额外的字段:
file = mongo_.fs.files.find_one({'_id': ObjectId(fileId)})
file['description'] = request_data.get('description', None)
mongo_.fs.files.save(file)
您的代码示例中的 file
是什么?也就是说,你传递给 GridFS.put 的是什么?
要将元数据添加到 GridFS 文件,请将额外的关键字参数传递给 put
、as it shows in the PyMongo tutorial:
>>> fs.put(b'data', filename='foo', description='my description')
ObjectId('5825ea8ea08bff9df5059099')
现在元数据与您的数据一起存储在 GridFS 中:
>>> gridout = fs.get(ObjectId('5825ea8ea08bff9df5059099'))
>>> gridout.description
u'my description'
在幕后,您可以看到 PyMongo 将元数据存储在 MongoDB 中的 fs.files
集合中:
>>> for doc in db.fs.files.find()
... print(doc.get('description'))
...
my description
但是访问 GridFS 数据的更好方法是使用 PyMongo 的 GridFS API,而不是直接查询集合。
另一种存储元数据的方法是创建一个 GridIn,设置一个字段,然后调用 close
:
>>> gridin = fs.new_file()
>>> gridin.filename = 'foo'
>>> gridin.description = 'my description'
>>> gridin.write(b'data')
>>> gridin.close()
如果您需要使用数据块多次调用 write
,这是一个不错的选择。