按类型查询 Cosmos DB 属性

Querying Cosmos DB by type property

在我的项目中,我想为某些 类 添加继承并将生成的对象保存到 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,然后发送到服务器。我只取回汽车类型的那些对象。这将是最佳选择,这样的事情可行且快速吗?

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

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

这样你就可以让你的可查询看起来像这样:return Client.CreateDocumentQuery<TEntity>(DocumentCollectionUri).Where(entity => entity.EntityType == nameof(Car)) 这将 return 正是你需要的。

如果您遇到困难,那么我建议您检查如何 collection sharing works in Cosmonaut。听起来正是您需要的东西。

免责声明:我是宇航员的创造者。