【问题标题】:How to save via mongodb shell a file served by GridFS in a mongoengine/Django FileField如何通过 mongodb shell 在 mongoengine/Django FileField 中保存由 GridFS 提供的文件
【发布时间】:2012-11-24 14:22:07
【问题描述】:

我有一个通过 mongofiles 保存在 GridFS 上的文件

$ mongofiles -d dba put file.txt
connected to: 127.0.0.1
added file: { _id: ObjectId('50c0a48f8d1d53325a7d7b01'), filename: "file.txt", chunkSize: 262144, uploadDate: new Date(1354802319244), md5: "a6039c33d297d12d0dfb9b1a99bda542", length: 3527 }
done!
$ mongofiles -d dba list
connected to: 127.0.0.1
file.txt    3527

我有一个 Django 和 mongoengine 的模型,定义为

class IFile(Document):
    iptr = FileField(required=True)

如何从 mongodb shell 将此文件保存在 IFile 实例中?

db.ifile.save({"iptr" : ??})

谢谢

【问题讨论】:

    标签: django mongodb mongoengine gridfs filefield


    【解决方案1】:

    GridFS 内部使用两个集合来存储数据:

    • fs.files 包含对象元数据
    • fs.chunks 包含带有一些额外记帐信息的二进制块

    文件

    文件集合中的文档需要以下字段:

    { "_id" : , // 此文件的唯一 ID "length" : data_number, // 文件大小(以字节为单位) "chunkSize" : data_number, // 每个块的大小。默认为 256k "uploadDate" : data_date, // 对象首次存储的日期 "md5" : data_string // 在这个文件的块上运行 "filemd5" 命令的结果 }

    chunks 集合中的文档结构如下:

    { "_id" : , // _chunks 集合中块的对象 id "files_id" : , // 对应文件集合条目的_id "n" : chunk_number, // 块按顺序编号,从 0 开始 "data" : data_binary, // 块的有效负载为 BSON 二进制类型 }

    更多详情请点击here 相关驱动文档:Python

    【讨论】:

      猜你喜欢
      • 2023-03-18
      • 2013-12-30
      • 2019-10-01
      • 2013-04-09
      • 2013-03-29
      • 2013-02-26
      • 1970-01-01
      • 2013-01-24
      • 1970-01-01
      相关资源
      最近更新 更多