首页 > 解决方案 > GridFS 上传文件时抛出 Command listIndexes failed 异常

问题描述

我无法让 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:命令列表索引失败:ns 不存在:test.ts.files”

相同的代码在其他计算机上工作,在我的计算机上失败。我什至重新安装了完全清理的 mongo。奇怪的是,相同的功能一开始就有效,然后只适用于一个特定的数据库,经过几次测试后就没有任何效果。

很抱歉,我无法提供更多信息。

标签: mongodbmongodb-.net-driver

解决方案


大多数 mongo 操作会根据需要自动创建集合,但有些操作不会。错误消息ns does not exist: test.ts.files暗示名称空间(数据库+集合)尚不存在并且需要事先创建(大概这就是它在一台计算机上工作而不是另一台计算机的原因——我敢打赌,如果你查看test了工作计算机上的数据库,您会看到该ts.files集合存在,并且我相信不同版本的 mongo 会在稍有不同的时间自动创建集合)。

grid fs 规范说,当驱动程序第一次尝试上传文件时,他们应该首先确保存在适当的索引(这就是出错的地方)。手动创建必要的集合fs.files和集合应该可以让这段代码正常工作,但我有点惊讶驱动程序没有为你处理这个。fs.chunks


推荐阅读