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中使用该名称放入的文件。我怎么得到
其他/以前的提供他们都有重复的名称?
根据我需要指明的文件:
"一个文件名,它是:WB上文件的名称 您的本地文件系统或GridFS对象。"
http://docs.mongodb.org/manual/reference/program/mongofiles/
但是我并不清楚什么"一个GridFS对象"在这种情况下意味着。
答案 0 :(得分:5)
" GridFS对象"在此上下文中表示存储在GridFS集合中的对象的名称。可以通过mongofiles手册页上的--local
选项最好地解释这种区别。
您需要考虑的是,您所做的是使用"相同的"提交项目。使用mongofiles实用程序的文件名。如该实用程序的手册页中所述,put
(请参阅commands)选项的默认行为是在商店中创建新条目。这可以使用--replace
选项覆盖,以便找到任何现有内容并使用您创建的新内容覆盖。
简而言之,无论文件是否包含不同的内容,您都创建了几个具有相同"对象名称"的东西。就mongofiles实用程序而言,它只知道如何通过"对象名称来获取"对象名称"所以它只会根据它的规则检索它找到的第一个。
现在,在GridFS的大多数API实现中,实际的get
操作通常由_id
完成。每个"对象"你以这种方式创建它仍然拥有它自己唯一的_id
值,所以当应用它时,你可以获得"对象"你想要的。
某些API实现添加了额外的查询类型方法,以便通过" filename"或其他元数据信息。但大多数情况下他们并不打扰,因为这些实际上只是对包含内容元数据和引用(默认为fs.files)的任何集合的标准.find()
或.findOne()
操作。这提供了超过合理数量的方法来找到"通过该API的_id
接口get
值的特定对象和问题。
因此虽然mongofiles
是一个很好的实用工具,可以从命令行执行基本的CRUD类型操作,但它只是一个实用程序,而不是"如何执行它的主要实现"。因此,作为一种实用工具,它提供了一种便利性。设置和获取对象的形式,使用"文件名"对象标识符的一部分。
另外值得注意的是,你 应该像文件系统一样对待GridFS商店,并保留你的文件名"与文件系统中所需的一样唯一。
但至于mongofiles
实用程序," name"你只需要继续检索信息。尽量不这样做,或者真正使用您选择的语言API来完成工作。
答案 1 :(得分:3)
我知道这个问题已经很老了,但人们可能仍然会来这里寻找答案,所以我想加上我的 2 美分。
这可能是更新版本的 mongofiles 中的一个新功能,但现在您可以让 mongofiles 实用程序也使用对象 ID,因此不再只是文件名。为此,您可以例如使用以下命令:
mongofiles get_id 'ObjectId("xyz...")'
其中 xyz... 是 mongo DB 对象 ID 字符串。
现在不幸的是,我看不到可以使用 mongofiles 显示数据库中文件的对象 ID 的方法,因此,为此,您需要使用普通的 mongo 命令行界面(mongo)使用诸如
之类的命令db.getCollection("fs.files").find({filename:/abc/i})
其中 abc 是文件名。输出看起来类似于
{ "_id" : ObjectId("xyz..."), "chunkSize" : 261120, "uploadDate" : ISODate("2018-12-09T13:37:43.743Z"), "length" : 16904, "md5" : "08ea...", "filename" : "abc" }
如果有多个名为 abc 的文件,则结果中会有多个项目。从这里您可以获取对象 id 字符串,然后使用它来调用 mongofiles get_id 命令...
答案 2 :(得分:0)
@Neil Lunn的回答是正确的。
以下是我的例子:
-d表示您的数据库,
-l表示您要上传的文件的本地文件系统路径
put表示您要上传文件
CDBG_2015_1.pdf表示GridFS中的文件名(不是您的本地文件系统路径)
mongofiles -d civilpdf -l C:\jh1\share_map_online\desktop_map_export\pdf\CDBG_2015_1.pdf put CDBG_2015_1.pdf
然后你可以按关键字" CDBG"
搜索文件mongofiles -d civilpdf search CDBG
您可以将文件下载到您喜欢的任何地方
mongofiles -d civilpdf -l "C:\your liked whatever place" get CDBG_2015_1.pdf