N1QL Basic

Start

Query

SELECT 'Hello World' AS Greeting

Result

{
  "results": [
    {
      "Greeting": "Hello World"
    }
  ]
}

User-friendly language

{
  "results": [
    {
      "age": 56,
      "children": [
        {
          "fname": "Abama",
          "age": 17,
          "gender": "m"
        },
        {
          "fname": "Bebama",
          "age": 21,
          "gender": "m"
        }
      ],
      "email": "ian@gmail.com",
      "fname": "Ian",
      "hobbies": ["golf", "surfing"],
      "lname": "Taylor",
      "relation": "cousin",
      "title": "Mr.",
      "type": "contact"
    }
  ]
}

Query

Query with asterisk

SELECT *            -- 반환할 문서일 일부
FROM tutorial       -- data bucket
WHERE fname = 'Ian' -- 조건

Result with asterisk

{
  "results": [
    {
      "tutorial": {
        "type": "contact",
        "title": "Mr.",
        "fname": "Ian",
        "lname": "Taylor",
        "age": 56,
        "email": "ian@gmail.com",
        "children": [
          {
            "fname": "Abama",
            "age": 17,
            "gender": "m"
          },
          {
            "fname": "Bebama",
            "age": 21,
            "gender": "m"
          }
        ],
        "hobbies": ["golf", "surfing"],
        "relation": "cousin"
      }
    }
  ]
}

Query with specific fields

SELECT
    type,
    title,
    fname,
    lname,
    age,
    email,
    children,
    hobbies,
    relation
FROM tutorial
WHERE fname = 'Ian'

Result with specific fields

{
  "results": [
    {
      "type": "contact",
      "title": "Mr.",
      "fname": "Ian",
      "lname": "Taylor",
      "age": 56,
      "email": "ian@gmail.com",
      "children": [
        {
          "fname": "Abama",
          "age": 17,
          "gender": "m"
        },
        {
          "fname": "Bebama",
          "age": 21,
          "gender": "m"
        }
      ],
      "hobbies": ["golf", "surfing"],
      "relation": "cousin"
    }
  ]
}

Documents, not rows

Query

SELECT children[0].fname AS child_name
FROM tutorial
WHERE fname = 'Dave'

Result

{
  "results": [
    {
      "child_name": "Aiden"
    }
  ]
}

Pattern matching with LIKE

Query

SELECT
    fname,
    email
FROM tutorial
WHERE email LIKE '%@yahoo.com'

Result

{
  "results": [
    {
      "email": "harry@yahoo.com",
      "fname": "Harry"
    }
  ]
}

Matching elements in nested arrays with ANY

Structure

Query

SELECT *
FROM tutorial
WHERE
    ANY child IN tutorial.children
    SATISFIES child.age > 10  END

Result

{
  "results": [
    {
      "tutorial": {
        "type": "contact",
        "title": "Mr.",
        "fname": "Dave",
        "lname": "Smith",
        "age": 46,
        "email": "dave@gmail.com",
        "children": [
          {
            "fname": "Aiden",
            "age": 17,
            "gender": "m"
          },
          {
            "fname": "Bill",
            "age": 2,
            "gender": "f"
          }
        ],
        "hobbies": ["golf", "surfing"],
        "relation": "friend"
      }
    },
    {
      "tutorial": {
        "type": "contact",
        "title": "Mr.",
        "fname": "Earl",
        "lname": "Johnson",
        "age": 46,
        "email": "earl@gmail.com",
        "children": [
          {
            "fname": "Xena",
            "age": 17,
            "gender": "f"
          },
          {
            "fname": "Yuri",
            "age": 2,
            "gender": "m"
          }
        ],
        "hobbies": ["surfing"],
        "relation": "friend"
      }
    },
    {
      "tutorial": {
        "type": "contact",
        "title": "Mr.",
        "fname": "Ian",
        "lname": "Taylor",
        "age": 56,
        "email": "ian@gmail.com",
        "children": [
          {
            "fname": "Abama",
            "age": 17,
            "gender": "m"
          },
          {
            "fname": "Bebama",
            "age": 21,
            "gender": "m"
          }
        ],
        "hobbies": ["golf", "surfing"],
        "relation": "cousin"
      }
    }
  ]
}

Combining multiple conditions with AND

Query

SELECT
    fname,
    email,
    children
FROM tutorial
WHERE
    ARRAY_LENGTH(children) > 0 AND
    email LIKE '%@gmail.com'

Result

{
  "results": [
    {
      "children": [
        {
          "fname": "Aiden",
          "age": 17,
          "gender": "m"
        },
        {
          "fname": "Bill",
          "age": 2,
          "gender": "f"
        }
      ],
      "email": "dave@gmail.com",
      "fname": "Dave"
    },
    {
      "children": [
        {
          "fname": "Xena",
          "age": 17,
          "gender": "f"
        },
        {
          "fname": "Yuri",
          "age": 2,
          "gender": "m"
        }
      ],
      "email": "earl@gmail.com",
      "fname": "Earl"
    },
    {
      "children": [
        {
          "fname": "Abama",
          "age": 17,
          "gender": "m"
        },
        {
          "fname": "Bebama",
          "age": 21,
          "gender": "m"
        }
      ],
      "email": "ian@gmail.com",
      "fname": "Ian"
    }
  ]
}

Querying primary keys

Query

SELECT
    fname,
    lname,
    children,
    email
FROM tutorial
USE KEYS ["dave", "ian"]

Result

{
  "results": [
    {
      "email": "dave@gmail.com",
      "fname": "Dave",
      "lname": "Smith"
    },
    {
      "email": "ian@gmail.com",
      "fname": "Ian",
      "lname": "Taylor"
    }
  ]
}

Quick review

Query

SELECT
    fname || " " || lname AS full_name,
    email,
    children[0:2] AS offspring  -- array slicing
FROM tutorial
WHERE email LIKE '%@yahoo.com'
OR ANY child IN tutorial.children SATISFIES child.age > 10 END

Result

{
  "results": [
    {
      "email": "dave@gmail.com",
      "full_name": "Dave Smith",
      "offspring": [
        {
          "age": 17,
          "fname": "Aiden",
          "gender": "m"
        },
        {
          "age": 2,
          "fname": "Bill",
          "gender": "f"
        }
      ]
    },
    {
      "email": "earl@gmail.com",
      "full_name": "Earl Johnson",
      "offspring": [
        {
          "age": 17,
          "fname": "Xena",
          "gender": "f"
        },
        {
          "age": 2,
          "fname": "Yuri",
          "gender": "m"
        }
      ]
    },
    {
      "email": "harry@yahoo.com",
      "full_name": "Harry Jackson"
    },
    {
      "email": "ian@gmail.com",
      "full_name": "Ian Taylor",
      "offspring": [
        {
          "age": 17,
          "fname": "Abama",
          "gender": "m"
        },
        {
          "age": 21,
          "fname": "Bebama",
          "gender": "m"
        }
      ]
    }
  ]
}

Pagination with LIMIT and OFFSET

Result without LIMIT AND OFFSET

{
  "results": [
    {
      "age": 18,
      "fname": "Fred"
    },
    {
      "age": 20,
      "fname": "Harry"
    },
    {
      "age": 40,
      "fname": "Jane"
    },
    {
      "age": 46,
      "fname": "Dave"
    },
    {
      "age": 46,
      "fname": "Earl"
    },
    {
      "age": 56,
      "fname": "Ian"
    }
  ]
}

Query with LIMIT

SELECT
    fname,
    age
FROM tutorial
ORDER BY age
LIMIT 2

Result with LIMIT

{
  "results": [
    {
      "age": 18,
      "fname": "Fred"
    },
    {
      "age": 20,
      "fname": "Harry"
    }
  ]
}

Query with LIMIT AND OFFSET

SELECT
    fname,
    age
FROM tutorial
ORDER BY age
LIMIT 2
OFFSET 4

Result with LIMIT AND OFFSET

{
  "results": [
    {
      "age": 46,
      "fname": "Earl"
    },
    {
      "age": 56,
      "fname": "Ian"
    }
  ]
}

Filtering grouped data with HAVING

Query with GROUP BY

SELECT
    relation,
    COUNT(*) AS count
FROM tutorial
GROUP BY relation

Result with GROUP BY

{
  "results": [
    {
      "count": 2,
      "relation": "cousin"
    },
    {
      "count": 2,
      "relation": "friend"
    },
    {
      "count": 1,
      "relation": "coworker"
    },
    {
      "count": 1,
      "relation": "parent"
    }
  ]
}

Review

Query with UNNEST

SELECT
    t.relation,
    t.fname,
    t.lname,
    t.email,
    t.children
FROM tutorial t
UNNEST t.children c

Result with UNNEST

{
  "results": [
    {
      "children": [
        {
          "fname": "Aiden",
          "age": 17,
          "gender": "m"
        },
        {
          "fname": "Bill",
          "age": 2,
          "gender": "f"
        }
      ],
      "email": "dave@gmail.com",
      "fname": "Dave",
      "lname": "Smith",
      "relation": "friend"
    },
    {
      "children": [
        {
          "fname": "Aiden",
          "age": 17,
          "gender": "m"
        },
        {
          "fname": "Bill",
          "age": 2,
          "gender": "f"
        }
      ],
      "email": "dave@gmail.com",
      "fname": "Dave",
      "lname": "Smith",
      "relation": "friend"
    },
    {
      "children": [
        {
          "fname": "Xena",
          "age": 17,
          "gender": "f"
        },
        {
          "fname": "Yuri",
          "age": 2,
          "gender": "m"
        }
      ],
      "email": "earl@gmail.com",
      "fname": "Earl",
      "lname": "Johnson",
      "relation": "friend"
    },
    {
      "children": [
        {
          "fname": "Xena",
          "age": 17,
          "gender": "f"
        },
        {
          "fname": "Yuri",
          "age": 2,
          "gender": "m"
        }
      ],
      "email": "earl@gmail.com",
      "fname": "Earl",
      "lname": "Johnson",
      "relation": "friend"
    },
    {
      "children": [
        {
          "fname": "Abama",
          "age": 17,
          "gender": "m"
        },
        {
          "fname": "Bebama",
          "age": 21,
          "gender": "m"
        }
      ],
      "email": "ian@gmail.com",
      "fname": "Ian",
      "lname": "Taylor",
      "relation": "cousin"
    },
    {
      "children": [
        {
          "fname": "Abama",
          "age": 17,
          "gender": "m"
        },
        {
          "fname": "Bebama",
          "age": 21,
          "gender": "m"
        }
      ],
      "email": "ian@gmail.com",
      "fname": "Ian",
      "lname": "Taylor",
      "relation": "cousin"
    }
  ]
}

Query with UNNEST ANd WHERE


SELECT
    t.relation,
    t.fname,
    t.lname,
    t.email,
    t.children
FROM tutorial t
UNNEST t.children c
WHERE c.age > 10

Result with UNNEST ANd WHERE

{
  "results": [
    {
      "children": [
        {
          "fname": "Aiden",
          "age": 17,
          "gender": "m"
        },
        {
          "fname": "Bill",
          "age": 2,
          "gender": "f"
        }
      ],
      "email": "dave@gmail.com",
      "fname": "Dave",
      "lname": "Smith",
      "relation": "friend"
    },
    {
      "children": [
        {
          "fname": "Xena",
          "age": 17,
          "gender": "f"
        },
        {
          "fname": "Yuri",
          "age": 2,
          "gender": "m"
        }
      ],
      "email": "earl@gmail.com",
      "fname": "Earl",
      "lname": "Johnson",
      "relation": "friend"
    },
    {
      "children": [
        {
          "fname": "Abama",
          "age": 17,
          "gender": "m"
        },
        {
          "fname": "Bebama",
          "age": 21,
          "gender": "m"
        }
      ],
      "email": "ian@gmail.com",
      "fname": "Ian",
      "lname": "Taylor",
      "relation": "cousin"
    },
    {
      "children": [
        {
          "fname": "Abama",
          "age": 17,
          "gender": "m"
        },
        {
          "fname": "Bebama",
          "age": 21,
          "gender": "m"
        }
      ],
      "email": "ian@gmail.com",
      "fname": "Ian",
      "lname": "Taylor",
      "relation": "cousin"
    }
  ]
}

SELECT
    t.relation,
    t.fname,
    t.lname,
    t.email,
    t.children,
    COUNT(*) AS count,
    AVG(c.age) AS avg_age
FROM tutorial t
UNNEST t.children c
WHERE c.age > 10
GROUP BY t.relation HAVING COUNT(*) > 1
ORDER BY avg_age DESC

Query

SELECT
    t.relation,
    COUNT(*) AS count,
    AVG(c.age) AS avg_age
FROM tutorial t
UNNEST t.children c -- children 배열의 모든 항목들에 접근하기 위해 사용
WHERE c.age > 10
GROUP BY t.relation HAVING COUNT(*) > 1
ORDER BY avg_age DESC
LIMIT 1 OFFSET 1

Expected flow

1. 전체 6개 문서

[
  {
    "t": {
      "type": "contact",
      "title": "Mr.",
      "fname": "Dave",
      "lname": "Smith",
      "age": 46,
      "email": "dave@gmail.com",
      "children": [
        { "fname": "Aiden", "age": 17, "gender": "m" },
        { "fname": "Bill", "age": 2, "gender": "f" }
      ],
      "hobbies": ["golf", "surfing"],
      "relation": "friend"
    }
  },
  {
    "t": {
      "type": "contact",
      "title": "Mr.",
      "fname": "Earl",
      "lname": "Johnson",
      "age": 46,
      "email": "earl@gmail.com",
      "children": [
        { "fname": "Xena", "age": 17, "gender": "f" },
        { "fname": "Yuri", "age": 2, "gender": "m" }
      ],
      "hobbies": ["surfing"],
      "relation": "friend"
    }
  },
  {
    "t": {
      "type": "contact",
      "title": "Mr.",
      "fname": "Fred",
      "lname": "Jackson",
      "age": 18,
      "email": "fred@gmail.com",
      "hobbies": ["golf", "surfing"],
      "children": null,
      "relation": "coworker"
    }
  },
  {
    "t": {
      "type": "contact",
      "title": "Mr.",
      "fname": "Harry",
      "lname": "Jackson",
      "age": 20,
      "email": "harry@yahoo.com",
      "relation": "parent"
    }
  },
  {
    "t": {
      "type": "contact",
      "title": "Mr.",
      "fname": "Ian",
      "lname": "Taylor",
      "age": 56,
      "email": "ian@gmail.com",
      "children": [
        { "fname": "Abama", "age": 17, "gender": "m" },
        { "fname": "Bebama", "age": 21, "gender": "m" }
      ],
      "hobbies": ["golf", "surfing"],
      "relation": "cousin"
    }
  },
  {
    "t": {
      "type": "contact",
      "title": "Mrs.",
      "fname": "Jane",
      "lname": "Edwards",
      "age": 40,
      "email": "jane@gmail.com",
      "contacts": [{ "fname": "Fred" }, { "fname": "Sheela" }],
      "relation": "cousin"
    }
  }
]

2.UNNEST로 children 배열과 그 부모를 조인

[
  {
    "c": { "age": 17, "fname": "Aiden", "gender": "m" },
    "t": {
      "type": "contact",
      "title": "Mr.",
      "fname": "Dave",
      "lname": "Smith",
      "age": 46,
      "email": "dave@gmail.com",
      "children": [
        { "fname": "Aiden", "age": 17, "gender": "m" },
        { "fname": "Bill", "age": 2, "gender": "f" }
      ],
      "hobbies": ["golf", "surfing"],
      "relation": "friend"
    }
  },
  {
    "c": { "age": 2, "fname": "Bill", "gender": "f" },
    "t": {
      "type": "contact",
      "title": "Mr.",
      "fname": "Dave",
      "lname": "Smith",
      "age": 46,
      "email": "dave@gmail.com",
      "children": [
        { "fname": "Aiden", "age": 17, "gender": "m" },
        { "fname": "Bill", "age": 2, "gender": "f" }
      ],
      "hobbies": ["golf", "surfing"],
      "relation": "friend"
    }
  },
  {
    "c": { "age": 17, "fname": "Xena", "gender": "f" },
    "t": {
      "type": "contact",
      "title": "Mr.",
      "fname": "Earl",
      "lname": "Johnson",
      "age": 46,
      "email": "earl@gmail.com",
      "children": [
        { "fname": "Xena", "age": 17, "gender": "f" },
        { "fname": "Yuri", "age": 2, "gender": "m" }
      ],
      "hobbies": ["surfing"],
      "relation": "friend"
    }
  },
  {
    "c": { "age": 2, "fname": "Yuri", "gender": "m" },
    "t": {
      "type": "contact",
      "title": "Mr.",
      "fname": "Earl",
      "lname": "Johnson",
      "age": 46,
      "email": "earl@gmail.com",
      "children": [
        { "fname": "Xena", "age": 17, "gender": "f" },
        { "fname": "Yuri", "age": 2, "gender": "m" }
      ],
      "hobbies": ["surfing"],
      "relation": "friend"
    }
  },
  {
    "c": { "age": 17, "fname": "Abama", "gender": "m" },
    "t": {
      "type": "contact",
      "title": "Mr.",
      "fname": "Ian",
      "lname": "Taylor",
      "age": 56,
      "email": "ian@gmail.com",
      "children": [
        { "fname": "Abama", "age": 17, "gender": "m" },
        { "fname": "Bebama", "age": 21, "gender": "m" }
      ],
      "hobbies": ["golf", "surfing"],
      "relation": "cousin"
    }
  },
  {
    "c": { "age": 21, "fname": "Bebama", "gender": "m" },
    "t": {
      "type": "contact",
      "title": "Mr.",
      "fname": "Ian",
      "lname": "Taylor",
      "age": 56,
      "email": "ian@gmail.com",
      "children": [
        { "fname": "Abama", "age": 17, "gender": "m" },
        { "fname": "Bebama", "age": 21, "gender": "m" }
      ],
      "hobbies": ["golf", "surfing"],
      "relation": "cousin"
    }
  }
]

3. c(자식)의 age가 10을 넘는 경우

[
  {
    "c": { "age": 17, "fname": "Aiden", "gender": "m" },
    "t": {
      "type": "contact",
      "title": "Mr.",
      "fname": "Dave",
      "lname": "Smith",
      "age": 46,
      "email": "dave@gmail.com",
      "children": [
        { "fname": "Aiden", "age": 17, "gender": "m" },
        { "fname": "Bill", "age": 2, "gender": "f" }
      ],
      "hobbies": ["golf", "surfing"],
      "relation": "friend"
    }
  },
  {
    "c": { "age": 17, "fname": "Xena", "gender": "f" },
    "t": {
      "type": "contact",
      "title": "Mr.",
      "fname": "Earl",
      "lname": "Johnson",
      "age": 46,
      "email": "earl@gmail.com",
      "children": [
        { "fname": "Xena", "age": 17, "gender": "f" },
        { "fname": "Yuri", "age": 2, "gender": "m" }
      ],
      "hobbies": ["surfing"],
      "relation": "friend"
    }
  },
  {
    "c": { "age": 17, "fname": "Abama", "gender": "m" },
    "t": {
      "type": "contact",
      "title": "Mr.",
      "fname": "Ian",
      "lname": "Taylor",
      "age": 56,
      "email": "ian@gmail.com",
      "children": [
        { "fname": "Abama", "age": 17, "gender": "m" },
        { "fname": "Bebama", "age": 21, "gender": "m" }
      ],
      "hobbies": ["golf", "surfing"],
      "relation": "cousin"
    }
  },
  {
    "c": { "age": 21, "fname": "Bebama", "gender": "m" },
    "t": {
      "type": "contact",
      "title": "Mr.",
      "fname": "Ian",
      "lname": "Taylor",
      "age": 56,
      "email": "ian@gmail.com",
      "children": [
        { "fname": "Abama", "age": 17, "gender": "m" },
        { "fname": "Bebama", "age": 21, "gender": "m" }
      ],
      "hobbies": ["golf", "surfing"],
      "relation": "cousin"
    }
  }
]

4. relation 필드로 그룹화하고, 그때 그룹된 결과의 수가 1개 초과하는 경우

[
  {
    "freind_group": {
        "result" : {
            "avg_age": 17,
            "count": 2,
            "relation": "friend"
        },
        "original_data": [
            {
                "c": { "age": 17, "fname": "Aiden", "gender": "m" },
                "t": {
                    "type": "contact",
                    "title": "Mr.",
                    "fname": "Dave",
                    "lname": "Smith",
                    "age": 46,
                    "email": "dave@gmail.com",
                    "children": [
                            { "fname": "Aiden", "age": 17, "gender": "m" },
                            { "fname": "Bill", "age": 2, "gender": "f" }
                        ],
                    "hobbies": ["golf", "surfing"],
                    "relation": "friend"
                }
            },
            {
                "c": { "age": 17, "fname": "Xena", "gender": "f" },
                "t": {
                    "type": "contact",
                    "title": "Mr.",
                    "fname": "Earl",
                    "lname": "Johnson",
                    "age": 46,
                    "email": "earl@gmail.com",
                    "children": [
                        { "fname": "Xena", "age": 17, "gender": "f" },
                        { "fname": "Yuri", "age": 2, "gender": "m" }
                    ],
                    "hobbies": ["surfing"],
                    "relation": "friend"
                }
            }
        ]
    },
    "cousin_group": {
        "result":{"avg_age": 19,"count": 2,"relation": "cousin"},
        "original_data": [
            {
                "c": { "age": 17, "fname": "Abama", "gender": "m" },
                "t": {
                "type": "contact",
                "title": "Mr.",
                "fname": "Ian",
                "lname": "Taylor",
                "age": 56,
                "email": "ian@gmail.com",
                "children": [
                    { "fname": "Abama", "age": 17, "gender": "m" },
                    { "fname": "Bebama", "age": 21, "gender": "m" }
                ],
                "hobbies": ["golf", "surfing"],
                "relation": "cousin"
                }
            },
            {
                "c": { "age": 21, "fname": "Bebama", "gender": "m" },
                "t": {
                "type": "contact",
                "title": "Mr.",
                "fname": "Ian",
                "lname": "Taylor",
                "age": 56,
                "email": "ian@gmail.com",
                "children": [
                    { "fname": "Abama", "age": 17, "gender": "m" },
                    { "fname": "Bebama", "age": 21, "gender": "m" }
                ],
                "hobbies": ["golf", "surfing"],
                "relation": "cousin"
                }
            }
        ]
    }
}

5. 평균 나이로 내림차순 정렬

[
  {
    "cousin_group": {
        "result":{
            "avg_age": 19,
            "count": 2,
            "relation": "cousin"
        },
        "original_data": [
            {
                "c": {
                    "age": 17,
                    "fname": "Abama",
                    "gender": "m" },
                "t": {
                "type": "contact",
                "title": "Mr.",
                "fname": "Ian",
                "lname": "Taylor",
                "age": 56,
                "email": "ian@gmail.com",
                "children": [
                    { "fname": "Abama", "age": 17, "gender": "m" },
                    { "fname": "Bebama", "age": 21, "gender": "m" }
                ],
                "hobbies": ["golf", "surfing"],
                "relation": "cousin"
                }
            },
            {
                "c": {
                    "age": 21,
                    "fname": "Bebama",
                    "gender": "m"
                },
                "t": {
                "type": "contact",
                "title": "Mr.",
                "fname": "Ian",
                "lname": "Taylor",
                "age": 56,
                "email": "ian@gmail.com",
                "children": [
                    { "fname": "Abama", "age": 17, "gender": "m" },
                    { "fname": "Bebama", "age": 21, "gender": "m" }
                ],
                "hobbies": ["golf", "surfing"],
                "relation": "cousin"
                }
            }
        ]
    },
    "freind_group": {
        "result" : {
            "avg_age": 17,
            "count": 2,
            "relation": "friend"
        },
        "original_data": [
            {
                "c": { "age": 17, "fname": "Aiden", "gender": "m" },
                "t": {
                    "type": "contact",
                    "title": "Mr.",
                    "fname": "Dave",
                    "lname": "Smith",
                    "age": 46,
                    "email": "dave@gmail.com",
                    "children": [
                            { "fname": "Aiden", "age": 17, "gender": "m" },
                            { "fname": "Bill", "age": 2, "gender": "f" }
                        ],
                    "hobbies": ["golf", "surfing"],
                    "relation": "friend"
                }
            },
            {
                "c": { "age": 17, "fname": "Xena", "gender": "f" },
                "t": {
                    "type": "contact",
                    "title": "Mr.",
                    "fname": "Earl",
                    "lname": "Johnson",
                    "age": 46,
                    "email": "earl@gmail.com",
                    "children": [
                        { "fname": "Xena", "age": 17, "gender": "f" },
                        { "fname": "Yuri", "age": 2, "gender": "m" }
                    ],
                    "hobbies": ["surfing"],
                    "relation": "friend"
                }
            }
        ]
    }
}

6. 0부터 시작하는 데이터에서, 1번째 인덱스 데이터 1개 반환

{
    "avg_age": 17,
    "count": 2,
    "relation": "friend"
}

JOIN

JOIN clause

Query

SELECT
    usr.personal_details,
    usr.shipped_order_history,
    usr.user_id,
    orders
FROM users_with_orders usr
USE KEYS "Elinor_33313792"  -- 사용자 프로필의 key
JOIN orders_with_users orders
    ON KEYS ARRAY s.order_id
        FOR s IN usr.shipped_order_history END

Expected flow

  1. users_with_orders 버킷에서 유저 정보를 가져온다
  2. USE KEYS 절로 Elinor_33313792 아이디에 해당하는 정보는 가져온다
  3. JOIN으로 orders_with_users 버킷을 조인시킨다 4.

Result

{
  "results": [
    {
      "orders": {
        "doc_type": "order",
        "order_details": {
          "order_datetime": "Wed Jun  6 18:53:39 2012",
          "order_id": "T103929516925"
        },
        "payment_details": {
          "payment_mode": "Debit Card",
          "total_charges": 308
        },
        "product_details": {
          "currency": "EUR",
          "list_price": 318,
          "pct_discount": 5,
          "product_id": "P3109994453",
          "sale_price": 303
        },
        "shipping_details": {
          "shipping_charges": 5,
          "shipping_status": "Delivered",
          "shipping_type": "Express"
        },
        "user_id": "Elinor_33313792"
      },
      "personal_details": {
        "age": 60,
        "display_name": "Elinor Ritchie",
        "email": "Elinor.Ritchie@snailmail.com",
        "first_name": "Elinor",
        "last_name": "Ritchie",
        "state": "Arizona"
      },
      "shipped_order_history": [
        {
          "order_datetime": "Wed May 30 22:00:09 2012",
          "order_id": "T103929516925"
        },
        {
          "order_datetime": "Thu Aug  4 22:00:09 2011",
          "order_id": "T573145204032"
        }
      ]
    },
    {
      "orders": {
        "doc_type": "order",
        "order_details": {
          "order_datetime": "Thu Aug 11 18:53:39 2011",
          "order_id": "T573145204032"
        },
        "payment_details": {
          "payment_mode": "NetBanking",
          "total_charges": 569
        },
        "product_details": {
          "currency": "GBP",
          "list_price": 666,
          "pct_discount": 15,
          "product_id": "P9315874155",
          "sale_price": 567
        },
        "shipping_details": {
          "shipping_charges": 2,
          "shipping_status": "Delivered",
          "shipping_type": "Regular"
        },
        "user_id": "Elinor_33313792"
      },
      "personal_details": {
        "age": 60,
        "display_name": "Elinor Ritchie",
        "email": "Elinor.Ritchie@snailmail.com",
        "first_name": "Elinor",
        "last_name": "Ritchie",
        "state": "Arizona"
      },
      "shipped_order_history": [
        {
          "order_datetime": "Wed May 30 22:00:09 2012",
          "order_id": "T103929516925"
        },
        {
          "order_datetime": "Thu Aug  4 22:00:09 2011",
          "order_id": "T573145204032"
        }
      ]
    }
  ]
}