我无法在计算机上使用GridFS。我正在使用.Net nuget MongoDb.Driver,并且尝试将文件上传到mongodb,如下所示:
MongoClient client = new MongoDB.Driver.MongoClient();
IMongoDatabase dtb = client.GetDatabase("test");
GridFSBucket bucket = new GridFSBucket(dtb);
using (var stream = File.Open(@"<path>", FileMode.Open))
{
ObjectId id = bucket.UploadFromStream("data", stream);
var data = bucket.DownloadAsBytes(id);}
但是如果失败并出现异常:“ MongoDB.Driver.MongoCommandException:命令listIndexes失败:ns不存在:test.ts.files”
同一代码可在另一台计算机上使用,但在我的计算机上失败。我什至用全部清理重新安装了mongo。奇怪的是,相同的功能最初是起作用的,然后仅对一个特定的数据库起作用,而经过很少的测试,则没有任何作用。
很抱歉,我无法提供更多信息。
答案 0 :(得分:1)
大多数mongo操作会根据需要自动创建集合,但有些操作则不会。错误消息ns does not exist: test.ts.files
表示名称空间(数据库+集合)尚不存在,需要事先创建(大概是这就是为什么它可以在一台计算机上运行,而不是在另一台计算机上运行的原因-我敢打赌,如果您查看在工作计算机上的test
数据库中,您会看到ts.files
集合存在,并且我相信不同版本的mongo会在稍微不同的时间自动创建集合)。
grid fs spec说,当驱动程序首次尝试上传文件时,他们应首先确保存在适当的索引(这是出错的地方)。手动创建必要的fs.files
和fs.chunks
集合应该可以使此代码正常工作,但是对于驱动程序无法为您处理这个问题,我感到有些惊讶。