True if the table is append only.
Gets a document.
Gets a document.
document id.
top level fields to retrieve.
an option of document. None if it doesn't exist.
Gets a document.
Gets a document.
Gets a document.
Gets a document.
Gets a document.
Gets a document.
Retruns true if the document exists.
Removes a document.
Removes a document.
the document id.
Column families storing document fields.
Column families storing document fields. There may be other column families in the table for meta data or index.
Returns the column family of a field.
A query may include a projection that specifies the fields of the document to return.
A query may include a projection that specifies the fields of the document to return. The projection limits the disk access and the network data transmission. Note that the semantics is different from MongoDB due to the design of BigTable. For example, if a specified field is a nested object, there is no easy way to read only the specified object in BigTable. Intra-row scan may help but not all BigTable implementations support it. And if there are multiple nested objects in request, we have to send multiple Get requests, which is not efficient. Instead, we return the whole object of a column family if some of its fields are in request. This is usually good enough for hot-cold data scenario. For instance of a table of events, each event has a header in a column family and event body in another column family. In many reads, we only need to access the header (the hot data). When only user is interested in the event details, we go to read the event body (the cold data). Such a design is simple and efficient. Another difference from MongoDB is that we don't support the excluded fields.
an object that specifies the fields to return. The _id field should be included to indicate which document to retrieve.
the projected document. The _id field will be always included.
The column qualifier of $id field.
Inserts an array of documents.
Inserts an array of documents. The elements of JsArray must be JsObject. Note that this is not ACID. If an exception thrown during insertion of one document, the elements front of it were already inserted and won't be rollback.
an array of documents.
Inserts a document.
Inserts a document. Different from upsert, this operation checks if the document already exists first.
the document.
true if the document is inserted, false if the document already existed.
Returns the row key of a document.
The table name.
Document serializer.
The $set operator replaces the values of fields.
The $set operator replaces the values of fields.
The document key _id and _tenant should not be set.
If the field does not exist, $set will add a new field with the specified value, provided that the new field does not violate a type constraint.
In MongoDB, $set will create the embedded documents as needed to fulfill the dotted path to the field. For example, for a $set {"a.b.c" : "abc"}, MongoDB will create the embedded object "a.b" if it doesn't exist. However, we don't support this behavior because of the performance considerations. We suggest the the alternative syntax {"a.b" : {"c" : "abc"}}, which has the equivalent effect.
To set an element of an array by the zero-based index position, concatenate the array name with the dot (.) and zero-based index position.
the id of document.
the fields to update.
Underlying BigTable.
Optional tenant id in case of multi-tenancy.
The $unset operator deletes particular fields.
The $unset operator deletes particular fields.
The document key _id & _tenant should not be unset.
If the field does not exist, then $unset does nothing (i.e. no operation).
When deleting an array element, $unset replaces the matching element with undefined rather than removing the matching element from the array. This behavior keeps consistent the array size and element positions.
Note that we don't really delete the field but set it as JsUndefined so that we keep the history and be able to time travel back. Otherwise, we will lose the history after a major compaction.
the id of document.
the fields to delete.
Updates a document.
Updates a document. The supported update operators include
the document update operators.
Upserts an array of documents.
Upserts an array of documents. The elements of JsArray must be JsObject.
an array of documents.
the list of document ids.
Upserts a document.
Upserts a document. If a document with same key exists, it will overwritten. The _id field of document will be used as the primary key in the table. If the document doesn't have _id field, a random UUID will be generated as _id.
the document.
the document id.
For UpdateOps.
Tables are the data containers of documents. A document is simply a JSON object with a unique id (the _id field), which is similar to the primary key in relational database. The key can be arbitrary JSON value including Object and Array. However, they are some limitations in practice: