【问题标题】:C# MongoDB Driver download file in GridFSGridFS 中的 C# MongoDB 驱动程序下载文件
【发布时间】:2020-05-21 10:19:30
【问题描述】:

我有一个 c# .net 核心项目,我正在尝试下载存储在 GridFS 中的文件。上传工作正常,使用 3T studio 我可以访问文件,但任何下载命令都会引发异常

var bucket = new GridFSBucket(_context.Database);  
var bytes = bucket.DownloadAsBytesByName("b7be1813-589a-4a0b-b720-70f9efd165aa");

抛出的异常是:

命令查找失败:错误=2 {"Errors":["排除指定order-by项对应的索引路径。"]

我不明白这里出了什么问题,我最初使用驱动程序创建了 GridFS 存储桶,因此索引应该是正确的,我不知道它会尝试订购什么会导致此问题。无论我使用哪个下载命令,它们都失败并出现相同的错误

任何帮助表示赞赏

【问题讨论】:

    标签: c# .net mongodb gridfs


    【解决方案1】:

    我遇到了同样的问题并挖了一点。

    根据this 文档,此错误对应于The query requests a sort on a field that is not indexed. GridFS 存储桶作为两个集合存在于MongoDB 中,名称为chunks 和files。查看DownloadAsBytesAsyncmethod 实现,我发现一个查询包含对*.chunks 集合中的字段n 的排序。所以,我在n 字段上添加了一个索引,它起作用了!

    //Creating index on n field in chunks collection
    var collection = mongoDb.GetCollection<dynamic>("contents.chunks");
    await collection.Indexes.CreateOneAsync(new CreateIndexModel<dynamic>("{'n': 1}"));
    
    //Working with gridfs bucket
    var bucket = new GridFSBucket(mongoDb, new GridFSBucketOptions {BucketName = "contents"});
    var inputBytes = new byte[] {100, 200, 50, 30};
    var id = await bucket.UploadFromBytesAsync("some_filename", inputBytes);
    var bytes = await bucket.DownloadAsBytesAsync(id);
    

    本机 MongoDB 自己创建这个索引,但 cosmosdb 的实现似乎不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-23
      • 2011-05-17
      • 1970-01-01
      • 2020-03-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多