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>
当我这样做时,我总是得到最后一个
我把那个名字放在gridfs中的文件。我怎么得到
其他/以前的,只要他们都有重复的名字?
根据文件,我需要说明:
“一个文件名,可以是:
您本地的文件系统或gridfs对象。“
http://docs.mongodb.org/manual/reference/program/mongofiles/
但我并不清楚“gridfs对象”在这里的含义。
最佳答案
这里的“gridfs对象”是指存储在gridfs集合中的对象的名称。Mongofiles手册页上的--local
选项可能最好地解释了这一区别。
这里需要考虑的是,您所做的是使用mongofiles实用程序提交具有“相同”文件名的项目。如该实用程序的手册页中所述,put
(请参见commands)选项的默认行为是在存储中创建一个新条目。这可以用--replace
选项覆盖,以便找到任何现有内容并用您创建的新内容覆盖。
简而言之,无论文件是否包含不同的内容,您都创建了几个具有相同“对象名”的对象。就mongofiles实用程序而言,它只知道如何通过“对象名”进行获取,因此它只会根据规则检索找到的第一个对象名。
现在在大多数gridfs的api实现中,实际的get
操作通常由_id
完成。以这种方式创建的每个“对象”仍有其自己的唯一值,因此当应用该值时,可以获得所需的“对象”。
一些api实现添加了额外的查询类型方法,以便按“文件名”或其他元数据信息查找。但大多数情况下,它们并不麻烦,因为它们实际上只是标准的_id
或.find()
操作,对任何包含内容元数据和引用(默认为fs.files)的集合执行这些操作。这提供了非常合理的方法来“找到”一个特定的对象,并通过该api的.findOne()
接口发出_id
值。
因此,虽然get
是从命令行执行基本crud类型操作的一个很好的实用程序,但它只是一个实用程序,而不是“如何执行”的主要实现。因此作为一个实用程序,它提供了一种设置和获取对象的“方便”形式,使用对象标识符的“文件名”部分。
另外值得注意的是,您应该像对待文件系统一样对待gridfs存储,并像对待文件系统一样保持“文件名”的唯一性。
但是对于mongofiles
实用程序,“name”是检索信息所需的全部内容。尽量不要这样做,或者真正使用您选择的语言api来做这项工作。
关于mongodb - MongoDB - mongofiles,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22797976/