N1ql查询遍历对象数组

时间:2017-05-23 02:57:08

标签: json couchbase n1ql

以下是我正在处理的couchbase文档结构:

  {
"name":"Harry",
"lastname":"sam",
"supplier_info": {
    "HU": [
      {
        "40383": "Bangalore."
      },{
        "41163": "new."
        }
    ],
"SK": [
      {
        "40383": "DYNAMIT KFT."
      }
    ]
}

要求是从我的数据库获取所有供应商编号为" 40383"不论国家。我怎么能用N1ql查询呢? (我也没有国家信息)

1 个答案:

答案 0 :(得分:1)

SELECT * FROM default
哪一个在ARRAY_FLATTEN(OBJECT_VALUES(supplier_info),2)在OBJECT_NAMES(v)END中满足“40383”;

输入数据

INSERT INTO默认VALUES(“kkk01”,{“supplier_info”:{“HU”:[{“40383”:“Bangalore。”},{“41163”:“new。”}],“SK”: [{“40383”:“DYNAMIT KFT。”}]}}),                     VALUES(“kkk03”,{“supplier_info”:{“HU”:[{“40383”:“Bangalore。”},{“41164”:“az。”}],“SK”:[{“40385”: “DYNAMIT”}]}});

以下查询为不同国家/地区提供了

SELECT DISTINCT country FROM(SELECT RAW ARRAY_FLATTEN(ARRAY ARRAY v.name FOR u in v.val WHEN“40383”in OBJECT_NAMES(u)END for v in OBJECT_PAIRS(supplier_info)END,2)FROM default)AS countries UNNEST国家AS国家的国家不缺;

获取供应商编号为40383的所有记录的供应商名称,国家,名称和姓氏。

SELECT q.name,q.lastname,s.country,s.snumber,s.sname FROM(SELECT name,lastname,ARRAY_FLATTEN(ARRAY ARRAY {“country”:v.name,“snumber”:OBJECT_PAIRS(u) )[0] .name,“sname”:OBJECT_PAIRS(u)[0] .val} FOR u IN v.val当“40383”在OBJECT_NAMES(u)结束时对于OB IN OBJECT_PAIRS(supplier_info)END,2)AS sinfo FROM default)AS q UNNEST q.sinfo AS s;