couchbase - 如何将一个文档中的数组值映射到另一个文档并显示在结果中
问题描述
我是 Couchbase 的新手,已经尝试了几个小时。已查看文档但无法找到此特定场景,我的存储桶有文档:
{
"type":"order",
"order_id":"1",
"products":[{"product_id":"1","qty":10},{"product_id":"2","qty":20}]
},
{
"type":"product",
"id":"1",
"name":"Product one"
},
{
"type":"product",
"id":"2",
"name":"Product two"
}
“订单”类型文档中的 product_ids 映射到“产品”类型文档中的 id 字段。我只需要增强订单文档并得到如下结果:
{
"type":"product",
"id":"2",
"name":"Product two"
}
我试过了:
select orderview.order_id,ARRAY{"product_id":l.product_id,"qty":l.qty,"name":m.name} for l in orderview.products end as product_view
from `Orders` orderview inner join `Orders` m on orderview.product_id=m.id
where orderview.type="order" and m.type="product";
这不返回任何结果。
我应该使用什么 N1QL?
解决方案
结帐https://blog.couchbase.com/ansi-join-support-n1ql/
CREATE INDEX ix1 ON Orders(order_id) WHERE type = "order";
CREATE INDEX ix2 ON Orders(id, name) WHERE type = "product";
SELECT o.*, ARRAY_AGG(OBJECT_ADD(op,"name",p.name)) AS products
FROM Orders AS o
LEFT UNNEST o.products AS op
LEFT JOIN Orders AS p ON p.type = "product" AND op.product_id = p.id
WHERE o.type = "order" AND o.order_id IS NOT NULL
GROUP BY o;
推荐阅读
- elasticsearch - 如何告诉 Elasticsearch 返回带有搜索结果的搜索参数?
- ruby-on-rails - 将 Rails active_storage 与 js 上传器集成
- react-native-navigation - react-native-navigation v2 将屏幕从 redux-saga 推送到特定选项卡
- c# - 防止 ReSharper 删除插值字符串中的必要括号
- arrays - Velocity arrayList - 按索引添加值
- google-sheets - 脚本从 Google Doc 中的单元格恢复数据格式
- c++ - 是否可以在调试期间直接转到某个点(例如,转到 index=n)
- r - 在循环中添加跟踪删除 R 闪亮中以前的跟踪
- http - 在包级别声明互斥变量是好习惯吗?
- java - 使用 java/selenium 弃用 REST API