Documents

Description of documents

Genji stores records as documents. A document is an object that contains pairs that associate a string field to a value of any type. Genji SQL represents documents as JSON objects, though they support far more types.

Here is a JSON representation of the structure of a document:

{ field1: value1, field2: value2, field3: value3, ... }

Example of a document using Genji SQL syntax:

{ name: "Nintendo Switch", price: { base: 379.99, vat: 20, total: base + base * vat / 100 }, brand: "Nintendo", "top-selling-games": [ "Mario Odyssey", "Zelda Breath of the Wild" ] }

Each field name must be a string, but values can be of any type, including another document, an array or an expression.

Any JSON object is a valid document and can be inserted as-is.

Field names

Field names can be any string, with only one exception: they cannot be empty.

Paths

A path is a way to refer to fields of a document or elements of an array.

Given the following document:

{ "name": "Foo", "address": { "city": "Lyon", "zipcode": "69001" }, "friends": [ { "name": "Bar", "address": { "city": "Paris", "zipcode": "75001" } }, { "name": "Baz", "address": { "city": "Ajaccio", "zipcode": "20000" }, "favorite game": "FF IX" } ] }

Accessing a top-level field can be achieved by simply referring to its name.

Example: name will evaluate to "Foo".

To access a nested field, either concatenate the fields with the . character, or use the [] notation

Examples: address.city will evaluate to "Lyon" Examples: address["city"] will evaluate to "Lyon"

To access an element of an array, use the index of the element

Examples:

  • friends[0] will evaluate to {"name": "Bar","address": {"city":"Paris","zipcode": "75001"}}
  • friends[1].name will evaluate to "Baz"
  • friends[1]."favorite game" will evaluate to "FF IX"

Last modified July 2, 2022: Rewrite SQL introduction (e5876b2)