| name | server-querying-nodejs | |||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| summary | Write and execute SQL++ (N1QL) queries from Node.js against Couchbase — SELECT, DML, parameterization, scan consistency, prepared statements, and query_context | |||||||||||||||||||||||||||||||||||||||||
| description | Write and execute SQL++ (N1QL) queries from Node.js against Couchbase — SELECT, DML, parameterization, scan consistency, prepared statements, and query_context | |||||||||||||||||||||||||||||||||||||||||
| compatibility | Node.js SDK 4.x. Requires couchbase>=4.0. | |||||||||||||||||||||||||||||||||||||||||
| metadata |
|
const result = await cluster.query(
'SELECT META().id, o.status, o.total FROM `myapp`._default.orders o WHERE o.status = $status LIMIT 10',
{ parameters: { status: 'pending' } }
);
for (const row of result.rows) console.log(row);const { QueryScanConsistency, MutationState } = require('couchbase');
// Read your own writes
const upsertResult = await collection.upsert('order_1', doc);
const result = await cluster.query(
"SELECT * FROM `myapp`._default.orders WHERE META().id = 'order_1'",
{ consistentWith: MutationState.from(upsertResult) }
);
// Strict read-after-write
const result2 = await cluster.query('SELECT ...',
{ scanConsistency: QueryScanConsistency.RequestPlus });const result = await cluster.query(
'SELECT * FROM `myapp`._default.orders WHERE customerId = $cid',
{ parameters: { cid: 'c500' }, adhoc: false }
);const result = await cluster.query(
"SELECT * FROM orders WHERE status = 'pending'",
{ queryContext: 'default:myapp._default' }
);Boundary note: This section covers SDK execution of DML statements. For SQL++ DML syntax (INSERT, UPDATE, DELETE, UPSERT, MERGE), see
sqlpp-language.
await cluster.query(
'UPDATE `myapp`._default.orders SET status = $s WHERE META().id = $id',
{ parameters: { s: 'shipped', id: 'order::1' } }
);When working within a named scope, use scope.query() to omit the bucket/scope prefix from every statement:
const scope = cluster.bucket('myapp').scope('inventory');
const result = await scope.query(
'SELECT * FROM orders WHERE status = $s',
{ parameters: { s: 'pending' } }
);
result.rows.forEach(row => console.log(row));See ../../shared/server/sql-syntax.md for SELECT syntax, JOINs, MERGE, window functions, and built-in functions.