Nosql 在RavenDB中匹配具有多个外键的项
我以前问过有关SQL Server的以下问题: 基本上,我需要能够找到符合多个标准的产品。我有一个场景,在这个场景中,我需要找到与多个类别中的每个类别相匹配的产品,并在多个发票中找到这些产品 解决方案是一组相当复杂的联合,这相当于计算产品与标准匹配的次数,并过滤计数与标准匹配的项目Nosql 在RavenDB中匹配具有多个外键的项,nosql,ravendb,Nosql,Ravendb,我以前问过有关SQL Server的以下问题: 基本上,我需要能够找到符合多个标准的产品。我有一个场景,在这个场景中,我需要找到与多个类别中的每个类别相匹配的产品,并在多个发票中找到这些产品 解决方案是一组相当复杂的联合,这相当于计算产品与标准匹配的次数,并过滤计数与标准匹配的项目 ; with data (ID, Count) as ( select pc.ProductID, count(*) from ProductCategories pc (nolock)
; with data (ID, Count) as (
select pc.ProductID, count(*) from ProductCategories pc (nolock)
inner join @categoryIDs /*table valued param*/ c on c.ID = pc.CategoryID
union all
select ip.ProductID, count(*) from InvoiceProducts ip (nolock)
inner join @invoiceIDs i on i.ID = ip.InvoiceID
)
select d.ID from data d
group by d.ID
having sum(d.Count) = @matchcount
但现在,我正在考虑一个NoSQL提供商。因此,我的问题是,如何在RavenDB或其他NoSQL项目中创建一个索引函数来匹配这种查询?要正确设置RavenDB或任何其他文档数据库,需要进行心理转换。问题在于我们在针对SQL server处理结构化数据时所使用的黑客 因此,这里的问题是如何对数据建模。更确切地说,你打算如何最经常地使用它;基于此,有一些关于定义哪些实体以及如何将它们联系在一起的准则 对于一个简单的产品对象,使用类别字符串[],您可以像这样查询数据库:
// Query on nested collections - will return any product with category "C#"
products = from p in session.Query<Product>()
where p.Categories.Any(cat => cat == "C#")
select c;
您可以添加任意数量的Where子句。索引将自动为您创建-但建议您在确定模型后使用静态索引
有关此主题的更多信息:
是的,我知道有一个范式的转变。棘手的部分在于匹配多个键。当我需要找到每个类别都有的产品时,事情会变得复杂得多。类似于会话中p的products=from。查询其中categories.Allcat0=>p.categories.Anycat1=>cat1==cat0选择c;但在生产环境中,您会这样做吗?看起来这个比例不太合适。。。至少我的关系思维告诉我的是,在RavenDB中,查询的复杂性与缩放无关。您只是在查询索引。通过尝试,不支持All。请参阅:。我认为如果你能在邮件列表中告诉我们你的场景,我们会帮助你创建一个合适的模型和匹配的查询,这会容易得多。