通过在 DocumentDb 中的嵌套 类 上应用 Join 来获取父记录
Fetch parent record by applying Join on nested classes in DocumentDb
public class Restraunt
{
public string RestId {get; set;}
public ICollection <RestrauntType> RType {get; set;}
}
public class RestrauntType
{
public string Opinion {get; set;}
}
如果我有一个字符串形式的意见值,我该如何获取与意见值相对应的 RestId。
我已经使用 .ToList() 完成了它并且它有效但是对于大量记录我需要更有效的技术如连接,你能告诉我如何继续连接吗?
------------已更新-------------------------------- --
稍微改变了我的方法并使用连接并获得了所需的解决方案。在这里
var sql = "SELECT * FROM Restraunt Join RType in Restraunt.RType Where RType.Opinion = 'It works !' ";
var query = client.CreateDocumentQuery(documentCollection.SelfLink, sql).ToList();
它省去了将所有查询加载到列表然后获取所需字段的工作,只需点击查询并直接获取字段。
DocumentDB顺应NoSQL趋势,不支持跨文档连接。如果您现在拥有的解决方案不能满足您的需求,您可以在客户端或使用存储过程 (sproc) 运行ning 在 DocumentDB 中手动实现连接。在我自己的工作中,如果我可以通过两次往返实现连接,我更喜欢客户端,因为它利用辅助存储并且在加载系统上具有更好的吞吐量。延迟是存储过程中等效延迟的 1.8 倍,但吞吐量更好。如果需要超过 2 次往返,则延迟太高,我倾向于使用 sproc。 YMMV 适合您的情况,因此您可能需要 运行 自己进行一些实验。 DocumentDB 的好处在于,它提供了很多机会来优化您的情况,而不是假设联接将是高性能的。请注意,传统数据库中的连接功能使其更容易并实现更快的开发,但这可能是一个性能问题,并且这些数据库不像 DocumentDB 那样提供足够的灵活性来让您通过编码来解决性能问题。
根据评论更新。 连接的手工编码是一个大话题。在 NoSQL 中,您经常会用消除连接或使其更快的非规范化来权衡手动连接的性能。最简单的连接算法涉及两次往返。在你的例子中,看起来 RestaurantType 就是我所说的查找类型,它的特征是一个小数字。在这种情况下,通常最好先获取整个查找 table(如果你想达到最佳效果,可以将其缓存一段时间)。然后执行您的 Restaurant 查询并将查找值手动缝合到从中返回的 table 中。
public class Restraunt
{
public string RestId {get; set;}
public ICollection <RestrauntType> RType {get; set;}
}
public class RestrauntType
{
public string Opinion {get; set;}
}
如果我有一个字符串形式的意见值,我该如何获取与意见值相对应的 RestId。 我已经使用 .ToList() 完成了它并且它有效但是对于大量记录我需要更有效的技术如连接,你能告诉我如何继续连接吗?
------------已更新-------------------------------- -- 稍微改变了我的方法并使用连接并获得了所需的解决方案。在这里
var sql = "SELECT * FROM Restraunt Join RType in Restraunt.RType Where RType.Opinion = 'It works !' ";
var query = client.CreateDocumentQuery(documentCollection.SelfLink, sql).ToList();
它省去了将所有查询加载到列表然后获取所需字段的工作,只需点击查询并直接获取字段。
DocumentDB顺应NoSQL趋势,不支持跨文档连接。如果您现在拥有的解决方案不能满足您的需求,您可以在客户端或使用存储过程 (sproc) 运行ning 在 DocumentDB 中手动实现连接。在我自己的工作中,如果我可以通过两次往返实现连接,我更喜欢客户端,因为它利用辅助存储并且在加载系统上具有更好的吞吐量。延迟是存储过程中等效延迟的 1.8 倍,但吞吐量更好。如果需要超过 2 次往返,则延迟太高,我倾向于使用 sproc。 YMMV 适合您的情况,因此您可能需要 运行 自己进行一些实验。 DocumentDB 的好处在于,它提供了很多机会来优化您的情况,而不是假设联接将是高性能的。请注意,传统数据库中的连接功能使其更容易并实现更快的开发,但这可能是一个性能问题,并且这些数据库不像 DocumentDB 那样提供足够的灵活性来让您通过编码来解决性能问题。
根据评论更新。 连接的手工编码是一个大话题。在 NoSQL 中,您经常会用消除连接或使其更快的非规范化来权衡手动连接的性能。最简单的连接算法涉及两次往返。在你的例子中,看起来 RestaurantType 就是我所说的查找类型,它的特征是一个小数字。在这种情况下,通常最好先获取整个查找 table(如果你想达到最佳效果,可以将其缓存一段时间)。然后执行您的 Restaurant 查询并将查找值手动缝合到从中返回的 table 中。