如何在N1QL和Couchbase中创建索引并使用join

kri*_*tel 1 node.js couchbase sql++

我在同一默认Bucket中有三个json,如下所示

我怎么能加入这三个json?

第一

"Country|1":{
  "_id": 1,
  "_type": "Country",
  "currency": "Afghani",
  "iso2": "AF",
  "name": "Afghanistan"
}
Run Code Online (Sandbox Code Playgroud)

第二

"Company|a1091aa0-b548-11e6-957e-139be07f46df": 
  {
  "_id": "a1091aa0-b548-11e6-957e-139be07f46df",
  "_type": "Company",
  "companyTypes": [
    1
  ],
  "country": "Country|1",
}
Run Code Online (Sandbox Code Playgroud)

第三

"Campaign|1001":{
  "_id": 1001,
  "_type": "Campaign",
  "banners": [],
  "carriers": [
    "Telstra"
  ],
  "country": 1,
  "created": "2016-03-08T18:30:00.000Z",

 }
Run Code Online (Sandbox Code Playgroud)

这里的关键是"name | _id",我在每个json之前都有.

我有这种类型所有json.我尝试通过引用此源Couchbase N1QL连接查询来加入下面的查询

SELECT d1.*,d2.* FROM 
default d1 USE KEYS "Company|a1091aa0-b548-11e6-957e-139be07f46df"
JOIN default d2 ON KEYS d1.country;
Run Code Online (Sandbox Code Playgroud)

我得到了渴望的结果.

但当我删除USE KEYS"公司| a1091aa0-b548-11e6-957e-139be07f46df"然后运行以下查询我得到INDEX错误

SELECT d1.*,d2.*
FROM default d1 
JOIN default d2 ON KEYS d1.country;
Run Code Online (Sandbox Code Playgroud)

我也尝试创建如下索引

CREATE INDEX campaign_user_co ON `default` (TOSTRING(country)) 
where _type="Company"
Run Code Online (Sandbox Code Playgroud)

即使我得到索引错误.

键空间默认值上没有与您的查询匹配的索引.

ger*_*dss 8

尝试添加主索引.

CREATE PRIMARY INDEX ON default;
Run Code Online (Sandbox Code Playgroud)

将键空间名替换为默认值.