如何解决如何编写 N1QL 查询以获取所有 ordrqty 等于 102 的 SaleDt1
/* 下面是示例文档*/
[
{
"trans-data":
{
"$Docver":"1.0","ManufId":"1234543","ToyDot":
{
"GrossAmt":"675","Wqty":"200"
},"Mflnitmlst":
[
{
"Mfprcdv":"25000","SaleDt1":
[
{
"Mtid":"0987655","ordrqty":"102","Plainqty":"1000"
}
]
},{
"Mfprcdv":"25000","SaleDt1":
[
{
"Mtid":"0987656","ordrqty":"110","Plainqty":"1500"
}
]
},"SaleDt1":
[
{
"Mtid":"0987657","ordrqty":"120","Plainqty":"2000"
}
]
}
],"Tmstp":"2021-03-04T14:23:21","Sectn":"XYZ"
}
},{
"trans-data":
{
"$Docver":"1.0","ToyDot":
{
"GrossAmt":"605","Wqty":"100"
},"Mflnitmlst":
[
{
"Mfprcdv":"26000","SaleDt1":
[
{
"Mtid":"1987655",{
"Mfprcdv":"26000","SaleDt1":
[
{
"Mtid":"1987656","SaleDt1":
[
{
"Mtid":"1987657","Sectn":"XYZ"
}
}
]
解决方法
假设您的文档以 ARRAY 开头
SELECT dmfl.SaleDt1
FROM mybucket AS mb
UNNEST mb AS d
UNNEST d.`trans-data`.Mflnitmlst AS dmfl
WHERE ANY v IN dmfl.SaleDt1 SATISFIES v.ordrqty = "102" END;
如果你想要只有“102”的对象
SELECT sld.*
FROM mybucket AS mb
UNNEST mb AS d
UNNEST d.`trans-data`.Mflnitmlst AS dmfl
UNNEST dmfl.SaleDt1 AS sld
WHERE sld.ordrqty = "102";
如果您的文档不是 ARRAY,则它是对象
SELECT sld.*
FROM mybucket AS mb
UNNEST mb.`trans-data`.Mflnitmlst AS dmfl
UNNEST dmfl.SaleDt1 AS sld
WHERE sld.ordrqty = "102";
结帐https://docs.couchbase.com/server/current/n1ql/n1ql-language-reference/indexing-arrays.html
更新:使用插入和选择
INSERT INTO default VALUES ("f01",[ { "trans-data": { "$Docver":"1.0","ManufId":"1234543","ToyDot": { "GrossAmt":"675","Wqty":"200" },"Mflnitmlst": [ { "Mfprcdv":"25000","SaleDt1": [ { "Mtid":"0987655","ordrqty":"102","Plainqty":"1000" } ] },{ "Mfprcdv":"25000","SaleDt1": [ { "Mtid":"0987656","ordrqty":"110","Plainqty":"1500" } ] },"SaleDt1": [ { "Mtid":"0987657","ordrqty":"120","Plainqty":"2000" } ] } ],"Tmstp":"2021-03-04T14:23:21","Sectn":"XYZ" } },{ "trans-data": { "$Docver":"1.0","ToyDot": { "GrossAmt":"605","Wqty":"100" },"Mflnitmlst": [ { "Mfprcdv":"26000","SaleDt1": [ { "Mtid":"1987655",{ "Mfprcdv":"26000","SaleDt1": [ { "Mtid":"1987656","SaleDt1": [ { "Mtid":"1987657","Sectn":"XYZ" } } ]);
SELECT dmfl.SaleDt1
FROM default AS mb USE KEYS "f01"
UNNEST mb AS d
UNNEST d.`trans-data`.Mflnitmlst AS dmfl
WHERE ANY v IN dmfl.SaleDt1 SATISFIES v.ordrqty = "102" END;
如果存储桶名称是 trans-data
并且您的示例文档来自选择查询
SELECT dmfl.SaleDt1
FROM `trans-data` AS mb
UNNEST mb.Mflnitmlst AS dmfl
WHERE ANY v IN dmfl.SaleDt1 SATISFIES v.ordrqty = "102" END;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。