mongodb - 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。奇怪的是,相同的功能一开始就有效,然后只适用于一个特定的数据库,经过几次测试后就没有任何效果。
很抱歉,我无法提供更多信息。
解决方案
大多数 mongo 操作会根据需要自动创建集合,但有些操作不会。错误消息ns does not exist: test.ts.files
暗示名称空间(数据库+集合)尚不存在并且需要事先创建(大概这就是它在一台计算机上工作而不是另一台计算机的原因——我敢打赌,如果你查看test
了工作计算机上的数据库,您会看到该ts.files
集合存在,并且我相信不同版本的 mongo 会在稍有不同的时间自动创建集合)。
grid fs 规范说,当驱动程序第一次尝试上传文件时,他们应该首先确保存在适当的索引(这就是出错的地方)。手动创建必要的集合fs.files
和集合应该可以让这段代码正常工作,但我有点惊讶驱动程序没有为你处理这个。fs.chunks
推荐阅读
- angular - 未收到来自跨模块订阅 observable 的事件
- c++ - 在 C++ Windows 中将图像文件从服务器发送到客户端
- r - 在 R 中的多个数据帧中查找每个单元格中的最大值
- javascript - 识别元素不存在 selenium webdriver javascript
- java - 如何在没有 java.util.Arrays 的情况下在 Java 中的两个数组中查找位置
- c++ - 为什么我的编译器不能按预期工作?
- xml - 是否有用于生成 XML 补丁文件的 RFC 5261 实现(而不是应用给定补丁的实现)
- sql - 如果其他列中存在值,如何防止插入值
- java - 尽管添加了驱动程序的 JAR 文件,但 JDBC 程序中的 ClassNotFoundException
- java - 尝试在 Java 中创建 ECDH 密钥对