对于需要字符串的DocumentDB“id”字段限制,存在哪些变通方法?

时间:2017-03-02 08:20:39

标签: azure azure-cosmosdb

我们有一个简单的例子,我们希望直接从API提供程序(Github)获取JSON文档并将它们存储在DocumentDB Collection中。不幸的是,文档碰巧有一个“id”字段,这是一个数字,因此在尝试创建文档时会导致错误。

这一定是一种常见的情况,我发现了一个似乎表明“最糟糕”的帖子。但是,我正在寻找确认。我抱有一点希望,我不必为ID字段编写自定义处理,它会在每次存储和检索操作时修改所有文档,只是为了使它们与DocumentDB兼容。

https://social.msdn.microsoft.com/Forums/vstudio/en-US/26386227-4aa2-48d5-9cc4-547caef18fb5/id-field-work-around-help-needed?forum=AzureDocumentDB

2 个答案:

答案 0 :(得分:1)

就像我在评论中提到的那样,我不确定主要问题是什么,但DocumentDB的id属性是一个字符串。在保存到DocumentDB之前,您需要将GitHub内容的数字id属性转换为字符串。或者,您可以创建自己的数字属性(id除外)以维护数值数据类型,以便将来查询。

您无法在集合本身内将id的数据类型从字符串更改为数字。

答案 1 :(得分:0)

感谢您的反馈。我认为我提供的文章中的建议比实现逻辑更具吸引力,以改变任何恰好命名的字段的类型" id"并且恰好不是用于处理DocumentDB的字符串。我一般都是NoSQL的新手,但是我可以看到将DocumentDB上的文件封装到外部对象中的其他好处也是基于它们的类型名称。因此,如果我正在使用存储库,那么JSON的形状就是这样:

{
  "repository": {
      "id": "Id from github",
      "foo": "bar"
  },
  "id" : "document-db-id"
}

在我的应用程序中使用这种包装方法作为惯例对我来说很有意义。我只需要添加"类型"我的ApplicationDB操作应用程序中的参数。

我也可以看到一些缺点。例如,它可能需要在DocumentDB和SDK之间的任何实体框架之间有一个层,它为API提供数据模型。

如果任何人有任何关于包装文件的经验或建议,请输入"输入"任何类型的NOSQL容器,都会受到欢迎。