我目前有一个客户和一个产品集合。。。客户包含订阅列表,订阅包含ProductId。我正在尝试创建一个索引,该索引将允许我只选择订阅中未使用的产品id,以便删除它们。
到目前为止,我只创建了一个索引来检索订阅中使用的productId。我研究了多个map reduce示例,甚至一些转换,但似乎没有任何意义。
有什么想法吗?
谢谢!
好的。。。所以它终于击中了我。我就是这么做的:我构建了两个映射,一个用于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}
希望这能帮助到别人!