C:\Programs\MongoDB\bin>mongofiles.exe list
connected to: 127.0.0.1
test123.txt 6
test123.txt 22
test123.txt 44
test456.txt 53
test456.txt 53
test456.txt 53
test456.txt 53
test456.txt 53
test456.txt 15
C:\Programs\MongoDB\bin>
当我做mongofiles get test456.txt
我总是最后一个
我以该名称放入 GridFS 中的文件。我如何获得
其他/以前的只要它们都有重复的名字?
根据我需要指定的文档:
“文件名可以是:上的文件名
您本地的文件系统,或 GridFS 对象。”
http://docs.mongodb.org/manual/reference/program/mongofiles/
但我不太清楚“GridFS 对象”在这种情况下意味着什么。
在这种情况下,“GridFS 对象”是指存储在 GridFS 集合中的对象的名称。这种区别可能最好地解释为--localmongofiles 手册页上的选项。
这里您需要考虑的是,您所做的是使用 mongofiles 实用程序提交具有“相同”文件名的项目。正如该实用程序的手册页中所述,默认行为put
(see commands) 选项是在商店内创建一个新条目。这可以被覆盖--replace选项,以便找到任何现有内容并用您创建的新内容覆盖。
简而言之,无论文件是否包含不同的内容,您都创建了多个具有相同“对象名称”的东西。就 mongofiles 实用程序而言,它只知道如何通过“对象名称”获取,因此它只会根据其规则检索它找到的第一个对象。
现在,在 GridFS 的大多数 API 实现中,实际get
操作通常由_id
。您以这种方式创建的每个“对象”仍然具有其独特性_id
值,因此当应用此值时,您可以获得所需的“对象”。
一些 API 实现添加了额外的查询类型方法,以便通过“文件名”或其他元数据信息进行查找。但大多数情况下他们不会打扰,因为这些实际上只是标准的.find() or .findOne()对任何集合的操作都保存内容元数据和引用(默认为 fs.files )。这提供了超过合理数量的方法来“查找”特定对象并解决该问题_id
价值通过get
该API的接口。
所以虽然mongofiles
是一个很好的实用程序,用于从命令行执行基本的 CRUD 类型操作,它只是一个实用程序,而不是“如何做”的主要实现。因此,作为一个实用程序,它提供了一种“方便”的设置和获取对象的形式,使用对象标识符的“文件名”部分。
另外值得注意的是,你should真正将 GridFS 存储视为文件系统,并保持“文件名”唯一,就像文件系统中所要求的那样。
但至于mongofiles
实用程序中,“名称”就是您检索信息所需的全部内容。尽量不要这样做,或者真正使用您选择的语言 API 来完成这项工作。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)