【发布时间】:2012-03-29 15:25:54
【问题描述】:
鉴于我有以下产品:
{
"_id": "2666df80782596200fca49557d757870",
"_rev": "3-99382057f6c484526835f1042753ccf2",
"type": "product",
"name": "Shirt",
"hersteller": "oska",
"price": 11.15
}
{
"_id": "2666df80782596200fca49557d758e8c",
"_rev": "1-01cc88e69e5ff30f0d011fdf61fbedbc",
"type": "product",
"name": "Pullover",
"hersteller": "acme",
"price": 7.58
}
还有订单
{
"_id": "2666df80782596200fca49557d758228",
"_rev": "2-0b4b3a8605893b60c962b8ae78f0b775",
"type": "order",
"orderDate": "01.01.2012",
"positions": [
"2666df80782596200fca49557d757870",
"2666df80782596200fca49557d758e8c"
]
}
我想查询所有带有_id、orderDate 和所有仓位价格总和的订单。 我该如何处理?
例子:
[
{ "_id": "2666df80782596200fca49557d758228", "orderDate": "01.01.2012", "total": 18.73 }
]
编辑:
这个例子是虚构的,我知道订单的总额不应该改变历史订单的产品价格变化。对于需要真正“加入”的事情来说,这是一个不好的例子。想象一下,当产品的价格发生变化时,我必须更改总数。因此,我不想简单地对总计字段进行非规范化。
当产品发生变化时,“修复”订单中的总数是可行的。但是,当我有很多不同的文档类型引用产品时,我需要使用一些功能逐个类型地更改它们。
肖恩的回答让我想到了我可以使用更改侦听器修复非规范化字段,但每次某些文档类型与另一个文档类型相关时,我都需要一个侦听器 - 听起来需要做很多工作。
【问题讨论】:
-
嗨瑞恩,感谢您的评论。我以前知道这一点,我想我已经阅读了关于加入的任何 SO 主题:-) 你链接的那个是关于“一对多连接”的,我要求“多对多”连接。我知道我可以 ?include_docs=true 在当前的 couchdb 版本中,这将有效地获取订单的相关产品,但我不能减少结果来计算总数。我看不出 reduce 在这里不起作用的原因。
-
好的,再次阅读stackoverflow.com/questions/3033443/… 意味着它不是正在讨论的“一对多连接”。我想我缺少的是这里的显示功能。我不明白为什么我仍然不能使用 reduce :-)
-
最后一条评论的意思是“列表函数”
标签: couchdb