【问题标题】:Querying Cosmos DB by type property按类型属性查询 Cosmos DB
【发布时间】:2018-12-17 10:24:09
【问题描述】:

在我的项目中,我想为某些类添加继承并将生成的对象保存到 Cosmos DB 数据库中的文档集合中。要保存有关类型的信息,我在 JSON.net 中使用此首选项:https://www.newtonsoft.com/json/help/html/SerializeTypeNameHandling.htm

但是,如何在不使用 LINQ 以类型安全的方式检索所有文档的情况下按类型查询集合。最好的方法是向那些名为 Type 的类添加一个属性,其中包含 JSON 对象的“$type”属性的信息。然后我可以这样查询:

       return Client.CreateDocumentQuery<TEntity>(DocumentCollectionUri).Where(entity => entity.Type == typeof(Car).ToString());

此 LINQ 查询将被转换为 SQL,然后发送到服务器。我只取回那些汽车类型的物品。这将是最佳选择,这样的事情是否可能且快速?

【问题讨论】:

    标签: c# azure azure-cosmosdb document-database


    【解决方案1】:

    你只需要你的TEntity 属性来实现某种接口,让ICosmosEntity 有一个EntityType 属性,它是一个字符串。

    那么你所有的TEntity对象都需要实现这个接口,他们会将nameof(TEntity)设置为EntityType

    这样,您的可查询外观如下:return Client.CreateDocumentQuery&lt;TEntity&gt;(DocumentCollectionUri).Where(entity =&gt; entity.EntityType == nameof(Car)),它将准确返回您需要的内容。

    如果您遇到问题,我建议您检查collection sharingCosmonaut 中的工作方式。听起来正是您需要的东西。

    免责声明:我是 Cosmonaut 的创造者。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-24
      • 2018-12-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多