按类型属性查询Cosmos DB

时间:2018-07-09 16:56:25

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

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

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

Type

此LINQ查询将转换为SQL,然后发送到服务器。我只找回那些汽车类型的东西。这将是最佳选择,这样的事情可能很快吗?

1 个答案:

答案 0 :(得分:2)

您只需拥有TEntity属性即可实现某种接口,就让ICosmosEntity拥有一个EntityType属性,该属性是一个字符串。

然后,您所有的TEntity对象都需要实现此接口,并且它们会将nameof(TEntity)设置为EntityType

这样,您可以使查询的外观像这样:return Client.CreateDocumentQuery<TEntity>(DocumentCollectionUri).Where(entity => entity.EntityType == nameof(Car)),它将完全返回您需要的内容。

如果您遇到困难,那么我建议您检查collection sharingCosmonaut中的工作方式。听起来确实是您需要的东西。

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