CosmosDB集合可以使用继承吗?

时间:2018-08-20 18:23:48

标签: azure nosql azure-cosmosdb document-database

我是了解NoSQL数据库的新手。

假设我有一个类似

的层次结构
public interface MyInterface
{
    [JsonProperty("id")]
    Guid Id { get; }
}

public class Foo : MyInterface
{
    public Guid Id { get; set; }

    [JsonProperty("intVal")]
    public int IntVal { get; set; }
}

public class Bar : MyInterface
{
    public Guid Id { get; set; }

    [JsonProperty("stringVal")]
    public string StringVal { get; set; }
}

是否可以创建包含MyInterfaces的集合?还是只能保留固定的Json结构,而我必须做类似

的操作
public class MyClass
{
    [JsonProperty("id")]
    public Guid Id { get; set; }

    [JsonProperty("type")]
    [JsonConverter(typeof(StringEnumConverter))]
    public MyClassType Discriminator { get; set; }

    [JsonProperty("fooIntVal")]
    public int? FooIntVal { get; set; }

    [JsonProperty("barStringVal")]
    public string BarStringVal { get; set; }
}

public Enum MyClassType
{
   [JsonProperty("foo")]
   Foo,

   [JsonProperty("bar")]
   Bar
};

???

1 个答案:

答案 0 :(得分:-1)

  

是否可以创建一个保存MyInterfaces的集合?

当然可以。如评论中所述,cosmos db集合没有架构,因此您可以将其设计为要设计的任何结构。

例如:

{
    "id": "1",
    "Discriminator": "foo",
    "FooIntVal": 5
},
{
    "id": "2",
    "Discriminator": "bar",
    "BarStringVal": "aaa"
}

甚至:

{ 
    "id": "5",
    "Discriminator": {
        "foo": {
            "FooIntVal": 5
        },
        "bar": {
            "BarStringVal": "aaa"
        }
     }
}

您可以灵活地调整数据结构。建议您参考此doc开始使用。有任何问题,请告诉我。