1
我目前有一个Customers和一个Products集合... 客户包含订阅列表,订阅包含ProductId。 我正在尝试创建一个索引,使我可以只选择未在订阅中使用的产品ID,以便我可以删除它们。Raven从另一个集合的数据过滤数据集合
我只管理到目前为止创建一个索引来检索订阅中使用的productIds。 我已经看过多个地图缩小例子甚至一些转换,但似乎没有任何意义。
任何想法?
谢谢!
我目前有一个Customers和一个Products集合... 客户包含订阅列表,订阅包含ProductId。 我正在尝试创建一个索引,使我可以只选择未在订阅中使用的产品ID,以便我可以删除它们。Raven从另一个集合的数据过滤数据集合
我只管理到目前为止创建一个索引来检索订阅中使用的productIds。 我已经看过多个地图缩小例子甚至一些转换,但似乎没有任何意义。
任何想法?
谢谢!
好的...所以它终于打到了我。 这就是我所做的: 我构建了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}
希望这可以帮助别人!
我会建议从reduce中删除where子句。然后,您可以离开用户== 0的位置在客户端。然后,这会给出一个索引,以便为您提供有关系统的其他信息,而不是将其限制为1个特定用途。 – 2014-08-28 18:16:36
确实。你是对的!感谢那 :) – Bianca 2014-09-01 07:28:21