【问题标题】:GridFS support in MongoAPI of Azure DocumentDBAzure DocumentDB 的 MongoAPI 中的 GridFS 支持
【发布时间】:2017-10-09 14:45:14
【问题描述】:

我正在通过 Java 中 springdata 中的 GridFsTemplate 将 MongoDB API 用于 DocumentDB。

我在尝试使用 MongoDB 的 GridFS 部分管理大文件时遇到错误。

我能够创建一个文件(我认为)并找到它的元数据,但我无法检索文件内容。返回以下错误:

Error: error: {
    "_t" : "OKMongoResponse",
    "ok" : 0,
    "code" : 8,
    "errmsg" : "The value '/media/7hsUAJOI2QsBAAAAAAAAAEeWwrcB' specified  for query '$resolveFor' is invalid.\r\nActivityId: a68945e8-0000-0000-0000-000000000000",
    "$err" : "The value '/media/7hsUAJOI2QsBAAAAAAAAAEeWwrcB' specified  for query '$resolveFor' is invalid.\r\nActivityId: a68945e8-0000-0000-0000-000000000000"
}

我在使用 Robomongo 并尝试检查 fs.chunks 集合时遇到了同样的错误。

我之所以说我认为我可以创建集合是因为​​使用 Azure Web 界面中的浏览功能,fs.chunks 似乎只有一条记录,而不是很多块。所以也许存储是问题。

如果使用标准 MongoDB,所有这些都可以正常工作。

这是保存文件的代码,完成后没有错误。

gridFsTemplate.store( content, filename, contentType, metadata );

这是找到它并获取内容的代码

//this works
GridFSDBFile data = gridFsTemplate.findOne( query );
ByteArrayOutputStream out = new ByteArrayOutputStream();
if ( data != null )
{
    //this results in Exception with the same message as the error above
    data.writeTo( out );
}

【问题讨论】:

    标签: azure-cosmosdb gridfs


    【解决方案1】:

    有第三方blog介绍了DocumentDB和MongoDB的区别,请注意Binary Large Object (BLOB) Storage部分。现在,Azure DocumentDB 已经扩展升级为Azure Cosmos DB,这是一个多模型数据库,包括文档、键值、图形,而不是 BLOB。所以我认为你应该只考虑使用DocumentDBCosmos DB via MongoDB API 作为JSON 存储系统。如果要使用文件存储,请考虑使用 Azure Blob 存储。

    希望对你有帮助。

    【讨论】:

    • 谢谢。但是,支持和advertising MongoDB API 的想法是允许开发人员在无需更改代码的情况下支持这两种数据库。这件事情是由很多原因导致的。顺便说一句,使用 DocumentDB Emulator 时不会发生上述错误。所以,也许模拟器已经领先了,并且修复即将到来......
    • 我会接受您的回答,因为我无法更改或更改配置来解决问题。基本上还不支持。你提供了一个替代方案。再次感谢。
    • 是否有支持矩阵显示 Cosmos DB 通过 Mongo DB 不支持的内容?对我来说,这个问题最糟糕的部分是 Cosmos DB 假装它成功存储了文件,它存储了元数据,然后实际上并没有存储文件的内容,这也是我在使用 GridFS 的应用程序中遇到的问题。 .至少在我调用 distinct 方法时,API 友好地返回一个不成功的结果。有没有什么地方我们可以清楚地看到 Cosmos DB 支持和不支持的 Mongo API 的哪些部分?是否有进一步的支持?
    • @jbteros 你说模拟器工作但 DocumentDB 不工作。我的感觉是:模拟器没有什么特别的,所以它只是工作,因为 GridFS 更多的是基于普通 MongoDB API 的模式。但是,Azure DocumentDB 似乎有一些新的智能逻辑,它试图将 GridFS 操作重新映射到 DocumentDB 附件 API(因此是 '/media/7hsUAJOI2QsBAAAAAAAAAEeWwrcB' 路径),但失败了。
    猜你喜欢
    • 2017-05-23
    • 2018-03-08
    • 1970-01-01
    • 2016-11-20
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    相关资源
    最近更新 更多