diff --git a/_drafts/postgresql-json.md b/_drafts/postgresql-json.md index c45282032..c190dd99c 100644 --- a/_drafts/postgresql-json.md +++ b/_drafts/postgresql-json.md @@ -8,8 +8,34 @@ SELECT * FROM users WHERE data->>'name' = 'John' SELECT data->>'name' AS name FROM users ``` -| Postgres | JavaScript pseudocode | -| ---- | ---- | -| WHERE `data->>'name'` = 'John' | `data.name` | -| WHERE `data ? 'name'` | `data.hasOwnProperty('name')` | -| `jsonb_array_elements_text(data->'tags')` | `data.map(d => d.tags).flatten.uniq` | +| Operator | Example | Description | Returns | +| ---- | ---- | ---- | ---- | +| `->` | `data->2` | Get array element `2` | JSON | +| `->` | `data->'name'` | Get object key `name` | JSON | +| `#>` | `data#>'{a,b}'` | Get keypath `a,b` (eg, `data.a.b`) | JSON | +| ---- | ---- | ---- | ---- | +| `->>` | `data->>2` | Get array element `2` | text | +| `->>` | `data->>'name'` | Get object key `name` | text | +| `#>` | `data#>>'{a,b}'` | Get keypath `a,b` (eg, `data.a.b`) | text | + +`>` returns JSON, `>>` returns text. + +### Boolean operators + +| Operator | Example | Description | +| ---- | ---- | ---- | +| `?` | `data ? 'name'` | Does `data` have key `name`? | +| `?|` | `data ?| array['a','b']` | Does `data` have `a` or `b`? | +| `?&` | `data ?& array['a','b']` | Does `data` have `a` and `b`? | +| `@>` | `'{"a":1,"b":2}'::jsonb @> '{"b":2}'::jsonb` | Does `left` include `right`? | +| `<@` | `'{"a":1}'::jsonb <@ '{"a":1,"b":2}'::jsonb` | Does `right` include `left`? | + +When `?`/`?|`/`?&` works on objects, it checks keys; when it works on arrays, it checks for elements. + +- `'{"a":1}'::jsonb ? 'a'` +- `'["a"]'::jsonb ? 'a'` + +## References + +- +- diff --git a/yarn.md b/yarn.md index 59685469d..ebb01bf3e 100644 --- a/yarn.md +++ b/yarn.md @@ -6,7 +6,7 @@ category: JavaScript libraries | npm | yarn | | --- | ---- | | `npm install` | `yarn` | -| `npm install gulp` | `yarn add gulp` | +| `npm install gulp --save` | `yarn add gulp` | | `npm install gulp --save-dev --save-exact` | `yarn add gulp --dev --exact` | | `npm install -g gulp` | `yarn global add gulp` | | `./node_modules/.bin/gulp` | `yarn run gulp` |