Constructor
new Datastore(optionsopt)
Parameters:
| Name | Type | Attributes | Description | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
options |
object |
<optional> |
Configuration options. Properties
|
Examples
Import the client library
const {Datastore} = require('@google-cloud/datastore');
Create a client that uses Application Default Credentials (ADC):
const datastore = new Datastore();
Create a client with explicit credentials:
const datastore = new Datastore({
projectId: 'your-project-id',
keyFilename: '/path/to/keyfile.json'
});
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 Datastore#key and
// 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 Datastore#createQuery.
//-
const query = datastore.createQuery('Company');
//-
// Multiple records can be found that match criteria with
// Query#filter.
//-
query.filter('location', 'CA');
//-
// Records can also be ordered with Query#order.
//-
query.order('name');
//-
// The number of records returned can be specified with
// Query#limit.
//-
query.limit(5);
//-
// Records' key structures can also be queried with
// Query#hasAncestor.
//-
const ancestorKey = datastore.key(['ParentCompany', 'Alphabet']);
query.hasAncestor(ancestorKey);
//-
// Run the query with 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];
});
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);
});
});
Creating Records
// New entities can be created and persisted with 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 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.
}
});
Deleting Records
// Entities can be removed from Datastore by passing the entity's key object
// to Datastore#delete.
//-
const key = datastore.key(['Company', 'Google']);
datastore.delete(key, (err) => {
if (!err) {
// Record deleted successfully.
}
});
Transactions
// Complex logic can be wrapped in a transaction with
// 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.
}
});
});
});
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);
});
Members
DatastoreRequest
DatastoreRequest class.
- See:
KEY
Access the Key from an Entity object.
MORE_RESULTS_AFTER_CURSOR
This is one of three values which may be returned from
Datastore#runQuery, Transaction#runQuery, and
Query#run as info.moreResults.
There may be more results after the specified end cursor.
MORE_RESULTS_AFTER_LIMIT
This is one of three values which may be returned from
Datastore#runQuery, Transaction#runQuery, and
Query#run as info.moreResults.
There may be more results after the specified limit.
NO_MORE_RESULTS
This is one of three values which may be returned from
Datastore#runQuery, Transaction#runQuery, and
Query#run as info.moreResults.
There are no more results left to query for.
Query
Query class.
- See:
Transaction
Transaction class.
- See:
v1
Properties:
| Name | Type | Description |
|---|---|---|
DatastoreClient |
constructor |
Reference to v1.DatastoreClient. |
- See:
KEY
Access the Key from an Entity object.
namespace
Methods
(static) double(value) → {object}
Helper function to get a Datastore Double object.
Parameters:
| Name | Type | Description |
|---|---|---|
value |
number |
The double value. |
Returns:
| Type | Description |
|---|---|
| object |
Example
const {Datastore} = require('@google-cloud/datastore');
const datastore = new Datastore();
const threeDouble = datastore.double(3.0);
(static) geoPoint(coordinates) → {object}
Helper function to get a Datastore Geo Point object.
Parameters:
| Name | Type | Description | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
coordinates |
object |
Coordinate value. Properties
|
Returns:
| Type | Description |
|---|---|
| object |
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));
(static) int(value) → {object}
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:
| Name | Type | Description |
|---|---|---|
value |
number |
The integer value. |
Returns:
| Type | Description |
|---|---|
| object |
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')
]);
(static) isDouble(value) → {boolean}
Helper function to check if something is a Datastore Double object.
Parameters:
| Name | Type | Description |
|---|---|---|
value |
* |
Returns:
| Type | Description |
|---|---|
| boolean |
Example
const {Datastore} = require('@google-cloud/datastore');
const datastore = new Datastore();
datastore.isDouble(0.42); // false
datastore.isDouble(datastore.double(0.42)); // true
(static) isGeoPoint(value) → {boolean}
Helper function to check if something is a Datastore Geo Point object.
Parameters:
| Name | Type | Description |
|---|---|---|
value |
* |
Returns:
| Type | Description |
|---|---|
| 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
(static) isInt(value) → {boolean}
Helper function to check if something is a Datastore Integer object.
Parameters:
| Name | Type | Description |
|---|---|---|
value |
* |
Returns:
| Type | Description |
|---|---|
| boolean |
Example
const {Datastore} = require('@google-cloud/datastore');
const datastore = new Datastore();
datastore.isInt(42); // false
datastore.isInt(datastore.int(42)); // true
(static) isKey(value) → {boolean}
Helper function to check if something is a Datastore Key object.
Parameters:
| Name | Type | Description |
|---|---|---|
value |
* |
Returns:
| Type | Description |
|---|---|
| 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
createQuery(namespaceopt, kind) → {Query}
Create a query for the specified kind. See Query for all of the available methods.
Parameters:
| Name | Type | Attributes | Description |
|---|---|---|---|
namespace |
string |
<optional> |
Namespace. |
kind |
string |
The kind to query. |
Returns:
| Type | Description |
|---|---|
| Query |
- See:
Example
const {Datastore} = require('@google-cloud/datastore');
const datastore = new Datastore();
const query = datastore.createQuery('Company');
export(config, callback)
Export entities from this project to a Google Cloud Storage bucket.
Parameters:
| Name | Type | Description | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
config |
ExportEntitiesConfig |
Configuration object. Properties
|
||||||||||||||||||||
callback |
function |
The callback function. Properties
|
getIndexes(optionsOrCallbackopt, callbackopt) → {void|Promise.<GetIndexesResponse>}
Get all of the indexes in this project.
Parameters:
| Name | Type | Attributes | Description | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
optionsOrCallback |
GetIndexesOptions | GetIndexesCallback |
<optional> |
|||||||||||||||||
options.gaxOptions |
object |
<optional> |
Request configuration options, outlined here: https://googleapis.github.io/gax-nodejs/global.html#CallOptions. |
||||||||||||||||
callback |
GetIndexesResponse |
<optional> |
The callback function. Properties
|
Returns:
| Type | Description |
|---|---|
| void | Promise.<GetIndexesResponse> |
getIndexesStream(optionsopt) → {ReadableStream.<Index>}
Get all of the indexes in this project as a readable object stream.
Parameters:
| Name | Type | Attributes | Description |
|---|---|---|---|
options |
GetIndexesOptions |
<optional> |
Configuration object. See Datastore#getIndexes for a complete list of options. |
Returns:
| Type | Description |
|---|---|
| ReadableStream.<Index> |
import(config, callback)
Import entities into this project from a remote file.
Parameters:
| Name | Type | Description | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
config |
ImportEntitiesConfig |
Configuration object. Properties
|
||||||||||||||||||||
callback |
function |
The callback function. Properties
|
index(id) → {Index}
Get a reference to an Index.
Parameters:
| Name | Type | Description |
|---|---|---|
id |
string |
The index name or id. |
Returns:
| Type | Description |
|---|---|
| Index |
insert(entities, callback)
Maps to Datastore#save, forcing the method to be insert.
Parameters:
| Name | Type | Description | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
entities |
object | Array.<object> |
Datastore key object(s). Properties
|
||||||||||||||||
callback |
function |
The callback function. Properties
|
key(optionsopt) → {Key}
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:
| Name | Type | Attributes | Description | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
options |
object | string | array |
<optional> |
Key path. To specify or override a namespace, you must use an object here to explicitly state it. Properties
|
Returns:
| Type | Description |
|---|---|
| Key |
A newly created Key from the options given. |
Examples
Create an incomplete key with a kind value of `Company`. Since no Id is supplied, Datastore will generate one on save.
const {Datastore} = require('@google-cloud/datastore');
const datastore = new Datastore();
const key = datastore.key('Company');
Create a complete key with a kind value of `Company` and Id `123`.
const {Datastore} = require('@google-cloud/datastore');
const datastore = new Datastore();
const key = datastore.key(['Company', 123]);
If the ID integer is outside the bounds of a JavaScript Number object, create an Int.
const {Datastore} = require('@google-cloud/datastore');
const datastore = new Datastore();
const key = datastore.key([
'Company',
datastore.int('100000000000001234')
]);
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=".
const {Datastore} = require('@google-cloud/datastore');
const datastore = new Datastore();
const key = datastore.key(['Company', 'Google']);
Create a complete key from a provided namespace and path.
const {Datastore} = require('@google-cloud/datastore');
const datastore = new Datastore();
const key = datastore.key({
namespace: 'My-NS',
path: ['Company', 123]
});
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.
const {Datastore} = require('@google-cloud/datastore');
const datastore = new Datastore();
const key = datastore.key(['Company', 'Google', 'Team', 'Datastore']);
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.
const {Datastore} = require('@google-cloud/datastore');
const datastore = new Datastore();
const key = datastore.key(['Company', 'Google', 'Employee']);
keyFromLegacyUrlsafe(key, locationPrefix) → {string}
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:
| Name | Type | Description |
|---|---|---|
key |
entity.Key |
Entity key object. |
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:
| Type | Description |
|---|---|
| string |
Created urlsafe key. |
Example
const {Datastore} = require('@google-cloud/datastore');
const datastore = new Datastore();
const urlSafeKey = 'ag9ncmFzcy1jbHVtcC00NzlyEwsSB0NvbXBhbnkiBkdvb2dsZQw';
datastore.keyFromLegacyUrlsafe(key);
keyToLegacyUrlSafe(key, locationPrefix, callback)
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:
| Name | Type | Description | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
key |
entity.Key |
Entity key object. |
||||||||||||
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. |
||||||||||||
callback |
function |
The callback function. Properties
|
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);
});
save(entities, gaxOptionsopt, callback)
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:
| Name | Type | Attributes | Description | ||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
entities |
object | Array.<object> |
Datastore key object(s). Properties
|
|||||||||||||||||||||||||
gaxOptions |
object |
<optional> |
Request configuration options, outlined here: https://googleapis.github.io/gax-nodejs/global.html#CallOptions. |
||||||||||||||||||||||||
callback |
function |
The callback function. Properties
|
Throws:
-
If an unrecognized method is provided.
- Type
- Error
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];
});
transaction(optionsopt) → {Transaction}
Create a new Transaction object.
Parameters:
| Name | Type | Attributes | Description | |||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
options |
object |
<optional> |
Configuration object. Properties
|
Returns:
| Type | Description |
|---|---|
| Transaction |
Example
const {Datastore} = require('@google-cloud/datastore');
const datastore = new Datastore();
const transaction = datastore.transaction();
update(entities, callback)
Maps to Datastore#save, forcing the method to be update.
Parameters:
| Name | Type | Description | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
entities |
object | Array.<object> |
Datastore key object(s). Properties
|
||||||||||||||||
callback |
function |
The callback function. Properties
|
upsert(entities, callback)
Maps to Datastore#save, forcing the method to be upsert.
Parameters:
| Name | Type | Description | ||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
entities |
object | Array.<object> |
Datastore key object(s). Properties
|
||||||||||||||||
callback |
function |
The callback function. Properties
|