Class Datastore

Idiomatic class for interacting with Cloud Datastore. Uses the lower-level DatastoreClient class under the hood.

In addition to the constructor options shown here, the Datastore class constructor accepts the same options accepted by DatastoreClient.

The Datastore Emulator

Make sure you have the gcloud SDK installed, then run:

  $ gcloud beta emulators datastore start --no-legacy

You will see the following printed:

  [datastore] API endpoint: http://localhost:8005
  [datastore] If you are using a library that supports the
              DATASTORE_EMULATOR_HOST environment variable, run:
  [datastore]
  [datastore]   export DATASTORE_EMULATOR_HOST=localhost:8005
  [datastore]
  [datastore] Dev App Server is now running.

Set that environment variable and your localhost Datastore will automatically be used. You can also pass this address in manually with apiEndpoint.

Additionally, DATASTORE_PROJECT_ID is recognized. If you have this set, you don't need to provide a projectId.

See Cloud Datastore Concepts Overview

Param

Configuration options.

Param

Override the default API endpoint used to reach Datastore. This is useful for connecting to your local Datastore server (usually "http://localhost:8080").

Param

Namespace to isolate transactions to.

Example

Import the client library

const {Datastore} = require('@google-cloud/datastore');

Example

Create a client that uses Application Default Credentials (ADC):

const datastore = new Datastore();

Example

Create a client with explicit credentials:

const datastore = new Datastore({
projectId: 'your-project-id',
keyFilename: '/path/to/keyfile.json'
});

Example

Retrieving Records

const {Datastore} = require('@google-cloud/datastore');
const datastore = new Datastore();

// Records, called "entities" in Datastore, are retrieved by using a key. The
// key is more than a numeric identifier, it is a complex data structure that
// can be used to model relationships. The simplest key has a string `kind`
// value, and either a numeric `id` value, or a string `name` value.
//
// A single record can be retrieved with {@link Datastore#key} and
// {@link Datastore#get}.
//-
const key = datastore.key(['Company', 'Google']);

datastore.get(key, function(err, entity) {
// entity = The record.
// entity[datastore.KEY] = The key for this entity.
});

//-
// <h3>Querying Records</h3>
//
// Create a query with {@link Datastore#createQuery}.
//-
const query = datastore.createQuery('Company');

//-
// Multiple records can be found that match criteria with
// {@link Query#filter}.
//-
query.filter('location', 'CA');

//-
// Records can also be ordered with {@link Query#order}.
//-
query.order('name');

//-
// The number of records returned can be specified with
// {@link Query#limit}.
//-
query.limit(5);

//-
// Records' key structures can also be queried with
// {@link Query#hasAncestor}.
//-
const ancestorKey = datastore.key(['ParentCompany', 'Alphabet']);

query.hasAncestor(ancestorKey);

//-
// Run the query with {@link Datastore#runQuery}.
//-
datastore.runQuery(query, (err, entities) => {
// entities = An array of records.

// Access the Key object for an entity.
const firstEntityKey = entities[0][datastore.KEY];
});

Example

Paginating Records

// Imagine building a website that allows a user to sift through hundreds of
// their contacts. You'll likely want to only display a subset of these at
// once, so you set a limit.
//-
const express = require('express');
const app = express();

const NUM_RESULTS_PER_PAGE = 15;

app.get('/contacts', (req, res) => {
const query = datastore.createQuery('Contacts')
.limit(NUM_RESULTS_PER_PAGE);

if (req.query.nextPageCursor) {
query.start(req.query.nextPageCursor);
}

datastore.runQuery(query, (err, entities, info) => {
if (err) {
// Error handling omitted.
return;
}

// Respond to the front end with the contacts and the cursoring token
// from the query we just ran.
const frontEndResponse = {
contacts: entities
};

// Check if more results may exist.
if (info.moreResults !== datastore.NO_MORE_RESULTS) {
frontEndResponse.nextPageCursor = info.endCursor;
}

res.render('contacts', frontEndResponse);
});
});

Example

Creating Records

// New entities can be created and persisted with {@link Datastore#save}.
// The entitiy must have a key to be saved. If you don't specify an
// identifier for the key, one is generated for you.
//
// We will create a key with a `name` identifier, "Google".
//-
const key = datastore.key(['Company', 'Google']);

const data = {
name: 'Google',
location: 'CA'
};

datastore.save({
key: key,
data: data
}, (err) => {
if (!err) {
// Record saved successfully.
}
});

//-
// We can verify the data was saved by using {@link Datastore#get}.
//-
datastore.get(key, (err, entity) => {
// entity = {
// name: 'Google',
// location: 'CA'
// }
});

//-
// If we want to update this record, we can modify the data object and re-
// save it.
//-
data.symbol = 'GOOG';

datastore.save({
key: key, // defined above (datastore.key(['Company', 'Google']))
data: data
}, (err, entity) => {
if (!err) {
// Record updated successfully.
}
});

Example

Deleting Records

// Entities can be removed from Datastore by passing the entity's key object
// to {@link Datastore#delete}.
//-
const key = datastore.key(['Company', 'Google']);

datastore.delete(key, (err) => {
if (!err) {
// Record deleted successfully.
}
});

Example

Transactions

// Complex logic can be wrapped in a transaction with
// {@link Datastore#transaction}. All queries and updates run within
// the transaction will be applied when the `done` function is called.
//-
const transaction = datastore.transaction();

transaction.run((err) => {
if (err) {
// Error handling omitted.
}

const key = datastore.key(['Company', 'Google']);

transaction.get(key, (err, entity) => {
if (err) {
// Error handling omitted.
}

entity.symbol = 'GOOG';

transaction.save(entity);

transaction.commit((err) => {
if (!err) {
// Transaction committed successfully.
}
});
});
});

Example

Queries with Ancestors

const {Datastore} = require('@google-cloud/datastore');
const datastore = new Datastore();

const customerId1 = 2993844;
const customerId2 = 4993882;
const customerKey1 = datastore.key(['Customer', customerId1]);
const customerKey2 = datastore.key(['Customer', customerId2]);
const cookieKey1 = datastore.key(['Customer', customerId1, 'Cookie',
'cookie28839']); // child entity const cookieKey2 =
datastore.key(['Customer', customerId1, 'Cookie', 'cookie78984']); // child
entity const cookieKey3 = datastore.key(['Customer', customerId2, 'Cookie',
'cookie93911']); // child entity

const entities = [];

entities.push({
key: customerKey1,
data: {
name: 'Jane Doe',
address: '4848 Liller'
}
});

entities.push({
key: customerKey2,
data: {
name: 'John Smith',
address: '4848 Pine'
}
});

entities.push({
key: cookieKey1,
data: {
cookieVal: 'dj83kks88rkld'
}
});

entities.push({
key: cookieKey2,
data: {
cookieVal: 'sj843ka99s'
}
});

entities.push({
key: cookieKey3,
data: {
cookieVal: 'otk82k2kw'
}
});

datastore.upsert(entities);

const query = datastore.createQuery().hasAncestor(customerKey1);

datastore.runQuery(query, (err, entities) => {
for (let entity of entities) {
console.log(entity[datastore.KEY]);
}
});

const query2 = datastore.createQuery().hasAncestor(customerKey2);

datastore.runQuery(query2, (err, entities) => {
for (let entity of entities) {
console.log(entity[datastore.KEY]);
}
});

datastore.runQuery(query2, (entities) => {
console.log(entities);
});

Hierarchy

  • DatastoreRequest
    • Datastore

Constructors

  • Parameters

    • Optional options: DatastoreOptions

    Returns Datastore

Properties

DatastoreRequest: typeof DatastoreRequest

Name

Datastore.DatastoreRequest

See

DatastoreRequest

KEY: typeof KEY_SYMBOL
MORE_RESULTS_AFTER_CURSOR: string
MORE_RESULTS_AFTER_LIMIT: string
NO_MORE_RESULTS: string
Query: typeof Query

Query class.

Name

Datastore.Query

See

Query

Transaction: typeof Transaction

Transaction class.

Name

Datastore.Transaction

See

Transaction

auth: GoogleAuth<JSONClient>
baseUrl_?: string
clients_: Map<string, ClientStub>
customEndpoint_?: boolean
datastore: Datastore
defaultBaseUrl_: string
id: undefined | string
namespace?: string
options: DatastoreOptions
port_?: number
requestCallbacks_: any
requests_: any
KEY: typeof KEY_SYMBOL

Access the Key from an Entity object.

Name

Datastore#KEY

MORE_RESULTS_AFTER_CURSOR: string

This is one of three values which may be returned from runQuery, runQuery, and run as info.moreResults.

There may be more results after the specified end cursor.

MORE_RESULTS_AFTER_LIMIT: string

This is one of three values which may be returned from runQuery, runQuery, and run as info.moreResults.

There may be more results after the specified limit.

NO_MORE_RESULTS: string

This is one of three values which may be returned from runQuery, runQuery, and run as info.moreResults.

There are no more results left to query for.

Methods

  • Generate IDs without creating entities.

    Parameters

    • key: Key

      The key object to complete.

    • options: number | AllocateIdsOptions

      Either the number of IDs to allocate or an options object for further customization of the request.

    Returns Promise<AllocateIdsResponse>

    Example

    const incompleteKey = datastore.key(['Company']);

    //-
    // The following call will create 100 new IDs from the Company kind, which
    // exists under the default namespace.
    //-
    datastore.allocateIds(incompleteKey, 100, (err, keys) => {});

    //-
    // Or, if you're using a transaction object.
    //-
    const transaction = datastore.transaction();

    transaction.run((err) => {
    if (err) {
    // Error handling omitted.
    }

    transaction.allocateIds(incompleteKey, 100, (err, keys) => {
    if (err) {
    // Error handling omitted.
    }

    transaction.commit((err) => {
    if (!err) {
    // Transaction committed successfully.
    }
    });
    });
    });

    //-
    // You may prefer to create IDs from a non-default namespace by providing
    an
    // incomplete key with a namespace. Similar to the previous example, the
    call
    // below will create 100 new IDs, but from the Company kind that exists
    under
    // the "ns-test" namespace.
    //-
    const incompleteKey = datastore.key({
    namespace: 'ns-test',
    path: ['Company']
    });

    function callback(err, keys, apiResponse) {}

    datastore.allocateIds(incompleteKey, 100, callback);

    //-
    // Returns a Promise if callback is omitted.
    //-
    datastore.allocateIds(incompleteKey, 100).then((data) => {
    const keys = data[0];
    const apiResponse = data[1];
    });
  • Parameters

    • key: Key
    • options: number | AllocateIdsOptions
    • callback: AllocateIdsCallback

    Returns void

  • Create an aggregation query from a Query.

    Parameters

    • query: Query

      A Query object.

    Returns AggregateQuery

  • Create a query for the specified kind. See Query for all of the available methods.

    Parameters

    • Optional kind: string

      The kind to query.

    Returns Query

    See

    Example

    const {Datastore} = require('@google-cloud/datastore');
    const datastore = new Datastore();
    const query = datastore.createQuery('Company');
  • Parameters

    • Optional kind: string[]

    Returns Query

  • Parameters

    • namespace: string
    • kind: string

    Returns Query

  • Parameters

    • namespace: string
    • kind: string[]

    Returns Query

  • Retrieve the entities as a readable object stream.

    Parameters

    • keys: any

      Datastore key object(s).

    • Optional options: RunQueryOptions

      Optional configuration. See get for a complete list of options.

    Returns Transform

    Throws

    If at least one Key object is not provided.

    Example

    const keys = [
    datastore.key(['Company', 123]),
    datastore.key(['Product', 'Computer'])
    ];

    datastore.createReadStream(keys)
    .on('error', (err) => {})
    .on('data', (entity) => {
    // entity is an entity object.
    })
    .on('end', () => {
    // All entities retrieved.
    });
  • Delete all entities identified with the specified key(s).

    Parameters

    Returns Promise<CommitResponse>

    Example

    const key = datastore.key(['Company', 123]);
    datastore.delete(key, (err, apiResp) => {});

    //-
    // Or, if you're using a transaction object.
    //-
    const transaction = datastore.transaction();

    transaction.run((err) => {
    if (err) {
    // Error handling omitted.
    }

    transaction.delete(key);

    transaction.commit((err) => {
    if (!err) {
    // Transaction committed successfully.
    }
    });
    });

    //-
    // Delete multiple entities at once.
    //-
    datastore.delete([
    datastore.key(['Company', 123]),
    datastore.key(['Product', 'Computer'])
    ], (err, apiResponse) => {});

    //-
    // Returns a Promise if callback is omitted.
    //-
    datastore.delete().then((data) => {
    const apiResponse = data[0];
    });
  • Parameters

    • keys: any
    • callback: CommitCallback

    Returns void

  • Parameters

    • keys: any
    • gaxOptions: CallOptions
    • callback: CommitCallback

    Returns void

  • Private

    Determine the appropriate endpoint to use for API requests. If not explicitly defined, check for the "DATASTORE_EMULATOR_HOST" environment variable, used to connect to a local Datastore server.

    Parameters

    • Optional customApiEndpoint: string

      Custom API endpoint.

    Returns void

  • Parameters

    • value: number

    Returns Double

  • Export entities from this project to a Google Cloud Storage bucket.

    Parameters

    • config: ExportEntitiesConfig

      Configuration object.

    Returns Promise<LongRunningResponse>

  • Parameters

    • config: ExportEntitiesConfig
    • callback: LongRunningCallback

    Returns void

  • Parameters

    • coordinates: Coordinates

    Returns GeoPoint

  • Retrieve the entities identified with the specified key(s) in the current transaction. Get operations require a valid key to retrieve the key-identified entity from Datastore.

    Parameters

    • keys: Key | Key[]

      Datastore key object(s).

    • Optional options: RunQueryOptions

      Optional configuration.

    Returns Promise<GetResponse>

    Throws

    If at least one Key object is not provided.

    Example

    //-
    // Get a single entity.
    //-
    const key = datastore.key(['Company', 123]);

    datastore.get(key, (err, entity) => {});

    //-
    // Or, if you're using a transaction object.
    //-
    const transaction = datastore.transaction();

    transaction.run((err) => {
    if (err) {
    // Error handling omitted.
    }

    transaction.get(key, (err, entity) => {
    if (err) {
    // Error handling omitted.
    }

    transaction.commit((err) => {
    if (!err) {
    // Transaction committed successfully.
    }
    });
    });
    });

    //-
    // Get multiple entities at once with a callback.
    //-
    const keys = [
    datastore.key(['Company', 123]),
    datastore.key(['Product', 'Computer'])
    ];

    datastore.get(keys, (err, entities) => {});

    //-
    // Below is how to update the value of an entity with the help of the
    // `save` method.
    //-
    datastore.get(key, (err, entity) => {
    if (err) {
    // Error handling omitted.
    }

    entity.newValue = true;

    datastore.save({
    key: key,
    data: entity
    }, (err) => {});
    });

    //-
    // Returns a Promise if callback is omitted.
    //-
    datastore.get(keys).then((data) => {
    const entities = data[0];
    });
  • Parameters

    • keys: Key | Key[]
    • callback: GetCallback

    Returns void

  • Parameters

    • keys: Key | Key[]
    • options: RunQueryOptions
    • callback: GetCallback

    Returns void

  • Get all of the indexes in this project.

    Parameters

    • Optional options: GetIndexesOptions

    Returns Promise<GetIndexesResponse>

  • Parameters

    • options: GetIndexesOptions
    • callback: GetIndexesCallback

    Returns void

  • Parameters

    • callback: GetIndexesCallback

    Returns void

  • Get all of the indexes in this project as a readable object stream.

    Parameters

    • Optional options: GetIndexesOptions

      Configuration object. See getIndexes for a complete list of options.

    Returns ReadableStream

  • Returns Promise<string>

  • Import entities into this project from a remote file.

    Parameters

    • config: ImportEntitiesConfig

      Configuration object.

    Returns Promise<LongRunningResponse>

  • Parameters

    • config: ImportEntitiesConfig
    • callback: LongRunningCallback

    Returns void

  • Get a reference to an Index.

    Parameters

    • id: string

      The index name or id.

    Returns Index

  • Maps to save, forcing the method to be insert.

    Parameters

    • entities: any

      Datastore key object(s).

    Returns Promise<CommitResponse>

  • Parameters

    • entities: any
    • callback: CommitCallback

    Returns void

  • Parameters

    • value: string | number

    Returns Int

  • Parameters

    • Optional value: {}

      Returns boolean

    • Parameters

      • Optional value: {}

        Returns boolean

      • Parameters

        • Optional value: {}

          Returns boolean

        • Parameters

          • Optional value: {}

            Returns boolean

          • Helper to create a Key object, scoped to the instance's namespace by default.

            You may also specify a configuration object to define a namespace and path.

            Parameters

            • Optional options: KeyOptions

              Key path. To specify or override a namespace, you must use an object here to explicitly state it.

            Returns Key

            A newly created Key from the options given.

            Example

            <caption>Create an incomplete key with a kind value of `Company`.
            Since no Id is supplied, Datastore will generate one on save.</caption>
            const {Datastore} = require('@google-cloud/datastore');
            const datastore = new Datastore();
            const key = datastore.key('Company');

            Example

            <caption>Create a complete key with a kind value of `Company` and Id `123`.</caption>
            const {Datastore} = require('@google-cloud/datastore');
            const datastore = new Datastore();
            const key = datastore.key(['Company', 123]);

            Example

            <caption>If the ID integer is outside the bounds of a JavaScript Number
            object, create an Int.</caption>
            const {Datastore} = require('@google-cloud/datastore');
            const datastore = new Datastore();
            const key = datastore.key([
            'Company',
            datastore.int('100000000000001234')
            ]);

            Example

            <caption>Create a complete key with a kind value of `Company` and name `Google`.
            Because the supplied Id is a string, Datastore will prefix it with "name=".
            Had the supplied Id been numeric, Datastore would prefix it with the standard, "id=".</caption>
            const {Datastore} = require('@google-cloud/datastore');
            const datastore = new Datastore();
            const key = datastore.key(['Company', 'Google']);

            Example

            <caption>Create a complete key from a provided namespace and path.</caption>
            const {Datastore} = require('@google-cloud/datastore');
            const datastore = new Datastore();
            const key = datastore.key({
            namespace: 'My-NS',
            path: ['Company', 123]
            });

            Example

            <caption>Create a complete key that specifies an ancestor. This will create a Team entity
            with a name of "Datastore", which belongs to the Company with the "name=Google" key.</caption>
            const {Datastore} = require('@google-cloud/datastore');
            const datastore = new Datastore();
            const key = datastore.key(['Company', 'Google', 'Team', 'Datastore']);

            Example

            <caption>Create a incomplete key that specifies an ancestor. This will create an Employee entity
            with an auto-generated Id, which belongs to the Company with the "name=Google" key.</caption>
            const {Datastore} = require('@google-cloud/datastore');
            const datastore = new Datastore();
            const key = datastore.key(['Company', 'Google', 'Employee']);
          • Parameters

            Returns Key

          • Parameters

            • path: string

            Returns Key

          • Helper to convert URL safe key string to entity key object

            This is intended to work with the "legacy" representation of a datastore "Key" used within Google App Engine (a so-called "Reference").

            Parameters

            • key: string

              Entity key object.

            Returns Key

            Created urlsafe key.

            Example

            const {Datastore} = require('@google-cloud/datastore');
            const datastore = new Datastore();
            const urlSafeKey = 'ag9ncmFzcy1jbHVtcC00NzlyEwsSB0NvbXBhbnkiBkdvb2dsZQw';

            datastore.keyFromLegacyUrlsafe(key);
          • Helper to create a URL safe key.

            This is intended to work with the "legacy" representation of a datastore "Key" used within Google App Engine (a so-called "Reference"). The returned string can be used as the "urlsafe" The base64 encoded values will have padding removed.

            Parameters

            • key: Key

              Entity key object.

            • Optional locationPrefix: string

              Optional . The location prefix of an App Engine project ID. Often this value is 's', but may also be 'e', or other location prefixes currently unknown.

            Returns Promise<string>

            Example

            const {Datastore} = require('@google-cloud/datastore');
            const datastore = new Datastore();
            const key = datastore.key(['Company', 'Google']);

            datastore.keyToLegacyUrlSafe(key, (err, urlSafeKey) => {
            if (err) {
            // Error handling omitted.
            }
            console.log(urlSafeKey);
            });

            //-
            // Create a complete URL-safe key using a location prefix.
            //-
            const locationPrefix = 's~';

            datastore.keyToLegacyUrlSafe(key, locationPrefix, (err, urlSafeKey) => {
            if (err) {
            // Error handling omitted.
            }
            console.log(urlSafeKey);
            });

            //-
            // If the callback is omitted, we'll return a Promise.
            //-
            datastore.keyToLegacyUrlSafe(key).then((data) => {
            const urlSafeKey = data[0];
            console.log(urlSafeKey);
            });
          • Parameters

            • key: Key
            • callback: KeyToLegacyUrlSafeCallback

            Returns void

          • Parameters

            • key: Key
            • locationPrefix: string
            • callback: KeyToLegacyUrlSafeCallback

            Returns void

          • Merge the specified object(s). If a key is incomplete, its associated object is inserted and the original Key object is updated to contain the generated ID. For example, if you provide an incomplete key (one without an ID), the request will create a new entity and have its ID automatically assigned. If you provide a complete key, the entity will be get the data from datastore and merge with the data specified. By default, all properties are indexed. To prevent a property from being included in all indexes, you must supply an excludeFromIndexes array.

            Maps to save, forcing the method to be upsert.

            Parameters

            • entities: any

              Datastore key object(s).

            Returns Promise<CommitResponse>

          • Parameters

            • entities: any
            • callback: CommitCallback

            Returns void

          • Private

            Parameters

            • config: RequestConfig
            • callback: Function

            Returns void

          • Make a request as a stream.

            Parameters

            • config: RequestConfig

              Configuration object.

            Returns AbortableDuplex

          • Private

            Make a request to the API endpoint. Properties to indicate a transactional or non-transactional operation are added automatically.

            Parameters

            • config: RequestConfig

              Configuration object.

            • callback: RequestCallback

              The callback function.

            Returns void

          • Parameters

            • query: AggregateQuery
            • Optional options: RunQueryOptions

            Returns Promise<RunQueryResponse>

          • Parameters

            • query: AggregateQuery
            • options: RunQueryOptions
            • callback: RequestCallback

            Returns void

          • Parameters

            • query: AggregateQuery
            • callback: RequestCallback

            Returns void

          • Datastore allows you to query entities by kind, filter them by property filters, and sort them by a property name. Projection and pagination are also supported.

            The query is run, and the results are returned as the second argument to your callback. A third argument may also exist, which is a query object that uses the end cursor from the previous query as the starting cursor for the next query. You can pass that object back to this method to see if more results exist.

            Parameters

            • query: Query

              Query object.

            • Optional options: RunQueryOptions

              Optional configuration.

            Returns Promise<RunQueryResponse>

            Example

            //-
            // Where you see `transaction`, assume this is the context that's relevant
            to
            // your use, whether that be a Datastore or a Transaction object.
            //-
            const query = datastore.createQuery('Lion');

            datastore.runQuery(query, (err, entities, info) => {
            // entities = An array of records.

            // Access the Key object for an entity.
            const firstEntityKey = entities[0][datastore.KEY];
            });

            //-
            // Or, if you're using a transaction object.
            //-
            const transaction = datastore.transaction();

            transaction.run((err) => {
            if (err) {
            // Error handling omitted.
            }

            transaction.runQuery(query, (err, entities) => {
            if (err) {
            // Error handling omitted.
            }

            transaction.commit((err) => {
            if (!err) {
            // Transaction committed successfully.
            }
            });
            });
            });

            //-
            // A keys-only query returns just the keys of the result entities instead
            of
            // the entities themselves, at lower latency and cost.
            //-
            const keysOnlyQuery = datastore.createQuery('Lion').select('__key__');

            datastore.runQuery(keysOnlyQuery, (err, entities) => {
            const keys = entities.map((entity) => {
            return entity[datastore.KEY];
            });
            });

            //-
            // Returns a Promise if callback is omitted.
            //-
            datastore.runQuery(query).then((data) => {
            const entities = data[0];
            });
          • Parameters

            • query: Query
            • options: RunQueryOptions
            • callback: RunQueryCallback

            Returns void

          • Parameters

            • query: Query
            • callback: RunQueryCallback

            Returns void

          • Get a list of entities as a readable object stream.

            See runQuery for a list of all available options.

            Parameters

            • query: Query

              Query object.

            • Optional options: RunQueryOptions

              Optional configuration.

            Returns Transform

            Example

            datastore.runQueryStream(query)
            .on('error', console.error)
            .on('data', (entity) => {
            // Access the Key object for this entity.
            const key = entity[datastore.KEY];
            })
            .on('info', (info) => {})
            .on('end', () => {
            // All entities retrieved.
            });

            //-
            // If you anticipate many results, you can end a stream early to prevent
            // unnecessary processing and API requests.
            //-
            datastore.runQueryStream(query)
            .on('data', (entity) => {
            this.end();
            });
          • Insert or update the specified object(s). If a key is incomplete, its associated object is inserted and the original Key object is updated to contain the generated ID.

            This method will determine the correct Datastore method to execute (upsert, insert, or update) by using the key(s) provided. For example, if you provide an incomplete key (one without an ID), the request will create a new entity and have its ID automatically assigned. If you provide a complete key, the entity will be updated with the data specified.

            By default, all properties are indexed. To prevent a property from being included in all indexes, you must supply an excludeFromIndexes array.

            To prevent large properties from being included in all indexes, you must supply excludeLargeProperties: true. See below for an example.

            Parameters

            Returns Promise<CommitResponse>

            Borrows

            save as save

            Throws

            If an unrecognized method is provided.

            Example

            //-
            // Save a single entity.
            //
            // Notice that we are providing an incomplete key. After saving, the
            // original Key object used to save will be updated to contain the path
            // with its generated ID.
            //-
            const key = datastore.key('Company');
            const entity = {
            key: key,
            data: {
            rating: '10'
            }
            };

            datastore.save(entity, (err) => {
            console.log(key.path); // [ 'Company', 5669468231434240 ]
            console.log(key.namespace); // undefined
            });

            //-
            // Save a single entity using a provided name instead of auto-generated ID.
            //
            // Here we are providing a key with name instead of an ID. After saving,
            // the original Key object used to save will be updated to contain the
            // path with the name instead of a generated ID.
            //-
            const key = datastore.key(['Company', 'donutshack']);
            const entity = {
            key: key,
            data: {
            name: 'DonutShack',
            rating: 8
            }
            };

            datastore.save(entity, (err) => {
            console.log(key.path); // ['Company', 'donutshack']
            console.log(key.namespace); // undefined
            });

            //-
            // Save a single entity with a provided namespace. Namespaces allow for
            // multitenancy. To read more about this, see
            // [the Datastore docs on key concepts](https://goo.gl/M1LUAu).
            //
            // Here we are providing a key with namespace.
            //-
            const key = datastore.key({
            namespace: 'my-namespace',
            path: ['Company', 'donutshack']
            });

            const entity = {
            key: key,
            data: {
            name: 'DonutShack',
            rating: 8
            }
            };

            datastore.save(entity, (err) => {
            console.log(key.path); // ['Company', 'donutshack']
            console.log(key.namespace); // 'my-namespace'
            });

            //-
            // Save different types of data, including ints, doubles, dates, booleans,
            // blobs, and lists.
            //
            // Notice that we are providing an incomplete key. After saving, the
            // original Key object used to save will be updated to contain the path
            // with its generated ID.
            //-
            const key = datastore.key('Company');
            const entity = {
            key: key,
            data: {
            name: 'DonutShack',
            rating: datastore.int(10),
            worth: datastore.double(123456.78),
            location: datastore.geoPoint({
            latitude: 40.6894,
            longitude: -74.0447
            }),
            numDonutsServed: 45,
            founded: new Date('Tue May 12 2015 15:30:00 GMT-0400 (EDT)'),
            isStartup: true,
            donutEmoji: Buffer.from('\uD83C\uDF69'),
            keywords: [
            'donut',
            'coffee',
            'yum'
            ]
            }
            };

            datastore.save(entity, (err, apiResponse) => {});

            //-
            // Use an array, `excludeFromIndexes`, to exclude properties from indexing.
            // This will allow storing string values larger than 1500 bytes.
            //-
            const entity = {
            key: datastore.key('Company'),
            excludeFromIndexes: [
            'description',
            'embeddedEntity.description',
            'arrayValue[]',
            'arrayValue[].description'
            ],
            data: {
            description: 'Long string (...)',
            embeddedEntity: {
            description: 'Long string (...)'
            },
            arrayValue: [
            'Long string (...)',
            {
            description: 'Long string (...)'
            }
            ]
            }
            };

            datastore.save(entity, (err, apiResponse) => {});

            //-
            // Use boolean `excludeLargeProperties`, to auto exclude Large properties from indexing.
            // This will allow storing string values larger than 1500 bytes.
            //-
            const entity = {
            key: datastore.key('Company'),
            data: {
            description: 'Long string (...)',
            embeddedEntity: {
            description: 'Long string (...)'
            },
            arrayValue: [
            'Long string (...)',
            {
            description: 'Long string (...)'
            }
            ]
            },
            excludeLargeProperties: true
            };

            datastore.save(entity, (err, apiResponse) => {});

            //-
            // Save multiple entities at once.
            //-
            const companyKey = datastore.key(['Company', 123]);
            const productKey = datastore.key(['Product', 'Computer']);
            const entities = [
            {
            key: companyKey,
            data: {
            HQ: 'Dallas, TX'
            }
            },
            {
            key: productKey,
            data: {
            vendor: 'Dell'
            }
            }
            ];

            datastore.save(entities, (err, apiResponse) => {});

            //-
            // Explicitly attempt to 'insert' a specific entity.
            //-
            const userKey = datastore.key(['User', 'chilts']);
            const entity = {
            key: userKey,
            method: 'insert',
            data: {
            fullName: 'Andrew Chilton'
            }
            };

            datastore.save(entity, (err, apiResponse) => {});

            //-
            // Returns a Promise if callback is omitted.
            //-
            datastore.save(entity).then((data) => {
            const apiResponse = data[0];
            });
          • Parameters

            • entities: any
            • gaxOptions: CallOptions
            • callback: CommitCallback

            Returns void

          • Parameters

            • entities: any
            • callback: CommitCallback

            Returns void

          • Create a new Transaction object.

            Parameters

            • Optional options: TransactionOptions

              Configuration object.

            Returns Transaction

            Example

            const {Datastore} = require('@google-cloud/datastore');
            const datastore = new Datastore();
            const transaction = datastore.transaction();
          • Maps to save, forcing the method to be update.

            Parameters

            • entities: any

              Datastore key object(s).

            Returns Promise<CommitResponse>

          • Parameters

            • entities: any
            • callback: CommitCallback

            Returns void

          • Maps to save, forcing the method to be upsert.

            Parameters

            • entities: any

              Datastore key object(s).

            Returns Promise<CommitResponse>

          • Parameters

            • entities: any
            • callback: CommitCallback

            Returns void

          • Helper function to get a Datastore Double object.

            Parameters

            • value: number

              The double value.

            Returns Double

            Example

            const {Datastore} = require('@google-cloud/datastore');
            const datastore = new Datastore();
            const threeDouble = datastore.double(3.0);
          • Helper function to get a Datastore Geo Point object.

            Parameters

            • coordinates: Coordinates

              Coordinate value.

            Returns GeoPoint

            Example

            const {Datastore} = require('@google-cloud/datastore');
            const datastore = new Datastore();
            const coordinates = {
            latitude: 40.6894,
            longitude: -74.0447
            };

            const geoPoint = datastore.geoPoint(coordinates);

            //-
            // List all companies that are located at 40.123 latitude
            // and -74.0447 longitude.
            //-
            const query = datastore.createQuery('Company');
            const companyQuery = query
            .filter('geoPoint.latitude', datastore.double(40.123))
            .filter('geoPoint.longitude', datastore.double(-74.0447));
          • Helper function to get a Datastore Integer object.

            This is also useful when using an ID outside the bounds of a JavaScript Number object.

            Parameters

            • value: string | number

              The integer value.

            Returns Int

            Example

            const {Datastore} = require('@google-cloud/datastore');
            const datastore = new Datastore();
            const sevenInteger = datastore.int(7);

            //-
            // Create an Int to support long Key IDs.
            //-
            const key = datastore.key([
            'Kind',
            datastore.int('100000000000001234')
            ]);
          • Helper function to check if something is a Datastore Double object.

            Parameters

            • Optional value: {}

              Returns boolean

              Example

              const {Datastore} = require('@google-cloud/datastore');
              const datastore = new Datastore();
              datastore.isDouble(0.42); // false
              datastore.isDouble(datastore.double(0.42)); // true
            • Helper function to check if something is a Datastore Geo Point object.

              Parameters

              • Optional value: {}

                Returns boolean

                Example

                const {Datastore} = require('@google-cloud/datastore');
                const datastore = new Datastore();
                const coordinates = {
                latitude: 0,
                longitude: 0
                };

                datastore.isGeoPoint(coordinates); // false
                datastore.isGeoPoint(datastore.geoPoint(coordinates)); // true
              • Helper function to check if something is a Datastore Integer object.

                Parameters

                • Optional value: {}

                  Returns boolean

                  Example

                  const {Datastore} = require('@google-cloud/datastore');
                  const datastore = new Datastore();
                  datastore.isInt(42); // false
                  datastore.isInt(datastore.int(42)); // true
                • Helper function to check if something is a Datastore Key object.

                  Parameters

                  • Optional value: {}

                    Returns boolean

                    Example

                    const {Datastore} = require('@google-cloud/datastore');
                    const datastore = new Datastore();
                    datastore.isKey({path: ['Company', 123]}); // false
                    datastore.isKey(datastore.key(['Company', 123])); // true
                  • Internal

                    Format a user's input to mutation methods. This will create a deep clone of the input, as well as allow users to pass an object in the format of an entity.

                    Both of the following formats can be supplied supported:

                    datastore.save({
                    key: datastore.key('Kind'),
                    data: { foo: 'bar' }
                    }, (err) => {})

                    const entity = { foo: 'bar' }
                    entity[datastore.KEY] = datastore.key('Kind')
                    datastore.save(entity, (err) => {})

                    Parameters

                    • obj: any

                      The user's input object.

                    Returns PrepareEntityObjectResponse

                  Generated using TypeDoc