Raven DB过滤来自另一个集合的数据集合

时间:2014-08-27 08:54:27

标签: indexing mapreduce ravendb

我目前有一个客户和一个产品系列...... 客户包含订阅列表,订阅包含ProductId。 我试图创建一个索引,允许我只选择订阅中未使用的产品ID,以便我可以删除它们。

到目前为止,我只管理创建索引来检索订阅中使用的productIds。 我已经研究过多个地图缩减示例甚至一些变换,但似乎没有任何意义。

有什么想法吗?

谢谢!

1 个答案:

答案 0 :(得分:2)

好的......所以它最终打击了我。 这就是我做的: 我构建了2个映射,一个用于Products集合,另一个用于Customers集合,我选择了产品ID并创建了一个名为Usage的附加属性。产品集合中的产品的使用率设置为0,客户 - >订阅中的产品的使用率设置为1。 在reduce中,我按使用总和进行过滤,以获得仅未使用的产品(sum = 0)。 见下面的代码:

图:

from prod in docs.Products
select new
{ProductId = prod.ExternalId,
Usage = 0
}
from customer in docs.Customers
from docSubscriptionsItem in ((IEnumerable<dynamic>)customer.Subscriptions).DefaultIfEmpty()
select new { ProductId = docSubscriptionsItem.ProductId,
Usage=1}

减少

from result in results
group result by result.ProductId
into g
let sum = g.Sum(p=>p.Usage)
where sum == 0
select new
{ProductId=g.Key, Usage = sum}

希望这有助于某人!