A SQL parser and executer for Cosmos DB.
const { default: query } = require("@zeit/cosmosdb-query");
const items = [
{ id: "foo" },
{ id: "bar" }
];
const { result } = query("SELECT * FROM c WHERE c.id = @id")
.exec(items, {
parameters: [{ name: "@id", value: "foo" }]
});
console.log(result); // [ { id: "foo" } ]sql<string>- Returns: <Query>
const q = query("SELECT * FROM c")items<Object[]> | <null>options<Object>parameters<Object[]> The parameters to pass to queryudf<Object>maxItemCount<number> The number of items to return at a timecontinuation<Object> Continuation tokencompositeIndexes<Object[][]> Optional composite index definitions for validating multipleORDER BYproperties. By default, no definition is required and this value is used only for validation.
- Returns: <Object>
result<Object[]> Result documentscontinuation<Object> Continuation token for subsequent calls
Executes a query for items.
query(`SELECT VALUE udf.REGEX_MATCH("foobar", ".*bar")`).exec([], {
udf: {
REGEX_MATCH(input, pattern) {
return input.match(pattern) !== null
}
}
});When the maxItemCount and/or continuation options are used,
all itesms have to contain the _rid field with unique values.
const items = [
{ _rid: "a", value: 1 },
{ _rid: "b", value: 2 },
{ _rid: "c", value: 3 }
];
const q = query(`SELECT * FROM c`);
const { result, continuation } = q.exec(items, { maxItemCount: 2 });
console.log(result); // [ { _rid: "a", value: 1 }, { _rid: "b", value: 2 } ]
const { result: result2 } = q.exec(items, { maxItemCount: 2, continuation });
console.log(result2); // [ { _rid: "c", value: 3 } ]keys<string[]>- Returns: <boolean>
Determines whether query may contain partition keys.
const q = query("SELECT * FROM c WHERE c.id = 1");
if (!q.containsPartitionKeys(["/key"])) {
throw new Error("query doesn't contain partition keys");
}- <Object>
The AST object of query.
const { default: query, SyntaxError } = require("@zeit/cosmosdb-query");
try {
query("INVALID SELECT").exec(items);
} catch (err) {
if (err instanceof SyntaxError) {
console.error(err);
}
throw err;
}All queries are supported except spatial functions ST_ISVALID and ST_ISVALIDDETAILED.
The spatial functions ST_INTERSECTS, ST_WITHIN, and ST_DISTANCE are supported; use parameters to pass in GeoJSON as strings. Items in collections that are GeoJSON are expected to be of type string.