Collections

You add data to Fauna as JSON-like objects called documents. Documents are stored in collections, which group related data.

Collection types

Fauna has two types of collections:

User-defined collections

A user-defined collection stores application data you’ve added to a Fauna database. For example, a database for an e-commerce application may have a Product collection to store product-related data.

A database can have zero or more user-defined collections. A user-defined collection can have any number of documents.

System collections

A system collection stores built-in Fauna resources.

For example, Fauna stores credentials as documents in the Credential system collection. You can use Credential methods to access Credential collection documents in FQL.

System collections include:

Named collections

A named collection is a subset of system collections whose documents are uniquely identified using names instead of document IDs.

Named collections include:

Limitations

You can create and manage system collection documents, but you can’t create, change, or delete a system collection itself.

You can’t change the collection schema of a system collection.

Collection schema

You create and manage user-defined collections as FSL collection schema.

Each user-defined collection has a collection schema. The schema defines the structure and behavior of a collection and its documents.

See Collection schema

Collection collection

Fauna stores the schema for user-defined collections as documents in the Collection system collection. You can use the Collection collection’s static methods to access collection schema in FQL.

Reference: Static Collection methods

Create and access collection documents

Collections names act as top-level objects in FQL queries. You can use collection instance methods to create and access collection documents.

For example, the following query uses collection.create() to create a document in the Customer collection:

// Creates a `Customer` collection document.
Customer.create({
  name: "John Doe",
  email: "jdoe@example.com",
  address: {
    street: "87856 Mendota Court",
    city: "Washington",
    state: "DC",
    postalCode: "20220",
    country: "US"
  }
})

The query returns the document and includes the document ID:

{
  id: "12345",
  coll: Customer,
  ts: Time("2099-07-10T15:41:49.945Z"),
  cart: null,
  orders: "hdW...",
  name: "John Doe",
  email: "jdoe@example.com",
  address: {
    street: "87856 Mendota Court",
    city: "Washington",
    state: "DC",
    postalCode: "20220",
    country: "US"
  }
}

You can use collection.byId() to get a document by its ID:

// Gets a `Customer` collection document by ID.
Customer.byId("12345")

You can chain document instance methods to a document to update, replace, or delete the document.

For example, the following query uses document.update() to update a document:

// Updates the `Customer` collection document.
Customer.byId("12345")?.update({
  // Updates the existing `name` field value.
  name: "Jonathan Doe"
})
Reference: Collection instance methods, document instance methods

Is this article helpful? 

Tell Fauna how the article can be improved:
Visit Fauna's forums or email docs@fauna.com

Thank you for your feedback!