Constructs a new Scan instance.
Optional
options: ScanOptionsClient instance.
Optional
concurrentIf set to true
, all cluster nodes will be scanned in parallel.
Optional
nobinsIf set to true
, the scan will return only meta data, and exclude bins.
Namespace to scan.
Optional
opsOptional
paginateIf set to true
, paginated queries are enabled. In order to receive paginated
results, the ScanPolicy#maxRecords property must assign a nonzero integer value.
const Aerospike = require('./lib/aerospike');
// Define host configuration
let config = {
hosts: '34.213.88.142:3000',
policies: {
batchWrite : new Aerospike.BatchWritePolicy({socketTimeout : 0, totalTimeout : 0}),
}
};
var batchRecords = []
for(let i = 0; i < 30; i++){
batchRecords.push({
type: Aerospike.batchType.BATCH_WRITE,
key: new Aerospike.Key('test', 'demo', 'key' + i),
ops:[Aerospike.operations.write('exampleBin', i)]
})
}
;(async function() {
try {
client = await Aerospike.connect(config)
await client.truncate('test', 'demo', 0)
await client.batchWrite(batchRecords, {socketTimeout : 0, totalTimeout : 0})
const scan = client.scan('test', 'demo', {paginate: true})
do {
const stream = scan.foreach({maxRecords: 11})
stream.on('error', (error) => { throw error })
stream.on('data', (record) => {
console.log(record.bins)
})
await new Promise(resolve => {
stream.on('end', (scanState) => {
scan.nextPage(scanState)
console.log(scan.scanState)
resolve()
})
})
} while (scan.hasNextPage())
} catch (error) {
console.error('An error occurred at some point.', error)
process.exit(1)
} finally {
if (client) client.close()
}
})()
const Aerospike = require('./lib/aerospike');
// Define host configuration
let config = {
hosts: '34.213.88.142:3000',
policies: {
batchWrite : new Aerospike.BatchWritePolicy({socketTimeout : 0, totalTimeout : 0}),
}
};
var batchRecords = []
for(let i = 0; i < 30; i++){
batchRecords.push({
type: Aerospike.batchType.BATCH_WRITE,
key: new Aerospike.Key('test', 'demo', 'key' + i),
ops:[Aerospike.operations.write('exampleBin', i)]
})
}
;(async function() {
try {
client = await Aerospike.connect(config)
await client.truncate('test', 'demo', 0)
await client.batchWrite(batchRecords, {socketTimeout : 0, totalTimeout : 0})
const scan = client.scan('test', 'demo', {paginate: true})
let allResults = []
let results = await scan.results({maxRecords: 11})
allResults = [...allResults, ...results]
results = await scan.results({maxRecords: 11})
allResults = [...allResults, ...results]
results = await scan.results({maxRecords: 11})
allResults = [...allResults, ...results]
console.log("Records returned in total: " + allResults.length) // Should be 30 records
} catch (error) {
console.error('An error occurred at some point.', error)
process.exit(1)
} finally {
if (client) client.close()
}
})()
Optional
scanIf set to a valid serialized scan, calling Scan#foreach will allow the next page of records to be queried while preserving the progress
of the previous scan. If set to null
, calling Scan#foreach will begin a new scan.
Optional
selectedList of bin names to be selected by the scan. If a scan specifies bins to
be selected, then only those bins will be returned. If no bins are
selected, then all bins will be returned (unless Scan#nobins is
set to true
).
Use Scan#select to specify the bins to select.
Name of the set to scan.
Optional
ttlOptional
udfPerform a read-write background scan and apply a Lua user-defined function (UDF) to each record.
UDF module name.
UDF function name.
Optional
udfArgs: AerospikeBinValue[]Arguments for the function.
Optional
policy: policy.ScanPolicyThe Scan Policy to use for this command.
Optional
scanID: numberJob ID to use for the scan; will be assigned randomly if zero or undefined.
A Promise that resolves to a Job instance.
When a background scan is initiated, the client will not wait for results from the database. Instead a Job instance will be returned, which can be used to query the scan status on the database.
UDF module name.
UDF function name.
The function to call when the command completes.
UDF module name.
UDF function name.
Arguments for the function.
The function to call when the command completes.
UDF module name.
UDF function name.
Arguments for the function.
The Scan Policy to use for this command.
The function to call when the command completes.
UDF module name.
UDF function name.
Arguments for the function.
The Scan Policy to use for this command.
Job ID to use for the scan; will be assigned randomly if zero or undefined.
The function to call when the command completes.
Performs a read-only scan on each node in the cluster. As the scan iterates through each partition, it returns the current version of each record to the client.
Optional
policy: null | policy.ScanPolicyThe Scan Policy to use for this command.
Optional
dataCb: ((data: AerospikeRecord) => void)The function to call when the
command completes with the results of the command; if no callback
function is provided, the method returns a Promise
instead.
(data): void
Parameters
data: AerospikeRecord
Returns void
Optional
errorCb: ((error: Error) => void)Callback function called when there is an error.
- (error): void
Parameters
- error: Error
Returns void
Optional
endCb: (() => void)Callback function called when an operation has completed.
- (): void
Returns void
Returns RecordStream
hasNextPage
- has
NextPage (): boolean Checks compiliation status of a paginated scan.
Returns boolean
True
if a next page exists, false
otherwise
Remarks
If false
is returned, there are no more records left in the scan, and the scan is complete.
If true
is returned, calling Scan#foreach will continue from the state specified by Scan#scanState.
nextPage
- next
Page (state): void Sets Scan#scanState to the value specified by the state
argument.
Parameters
- state: number[]
serialized scan emitted from the 'error' event.
Returns void
Remarks
setter function for the Scan#scanState member variable.
operate
- operate(operations, policy?, scanID?): Promise<Job<JobInfoResponse>>
Applies write operations to all matching records.
Parameters
- operations: Operation[]
List of write
operations to perform on the matching records.
Optional
policy: policy.ScanPolicyThe Scan Policy to use for this command.
Optional
scanID: numberJob ID to use for the scan; will be assigned
randomly if zero or undefined.
Returns Promise<Job<JobInfoResponse>>
A Promise that resolves to a Job instance.
Remarks
Performs a background scan and applies one or more write
operations to all records. Neither the records nor the results of the
operations are returned to the client. Instead a Job instance will
be returned, which can be used to query the scan status.
This method requires server >= 3.7.0.
Example: Increment count bin on all records in set using a background scan
const Aerospike = require('aerospike')
// INSERT HOSTNAME AND PORT NUMBER OF AEROSPIKE SERVER NODE HERE!
var config = {
hosts: '192.168.33.10:3000',
// Timeouts disabled, latency dependent on server location. Configure as needed.
policies: {
scan : new Aerospike.ScanPolicy({socketTimeout : 0, totalTimeout : 0})
}
}
Aerospike.connect(config).then(async (client) => {
const scan = client.scan('namespace', 'set')
const ops = [Aerospike.operations.incr('count', 1)]
const job = await scan.operate(ops)
await job.waitUntilDone()
client.close()
})
- operate(operations, policy, scanID, callback): void
Parameters
- operations: Operation[]
List of write
operations to perform on the matching records.
- policy: policy.ScanPolicy
The Scan Policy to use for this command.
- scanID: number
Job ID to use for the scan; will be assigned
randomly if zero or undefined.
- callback: TypedCallback<Job<JobInfoResponse>>
The function to call when the command completes.
Returns void
partitions
- partitions(begin, count, digest?): any
Specify the begin and count of the partitions
to be scanned by the scan foreach op.
Parameters
- begin: number
Start partition number to scan.
- count: number
Number of partitions from the start to scan.
Optional
digest: BufferStart from this digest if it is specified.
Returns any
select
- select(bins): void
Specify the names of bins to be selected by the scan.
Parameters
- bins: string[]
List of bin names to return.
Returns void
Remarks
If a scan specifies bins to be selected, then only those bins
will be returned. If no bins are selected, then all bins will be returned.
(Unless Scan#nobins is set to true
.)
- select(...bins): void
Specify the names of bins to be selected by the scan.
Parameters
Rest
...bins: string[]Spread of bin names to return.
Returns void
Remarks
If a scan specifies bins to be selected, then only those bins
will be returned. If no bins are selected, then all bins will be returned.
(Unless Scan#nobins is set to true
.)
Deprecated
since server 6.0
Remarks
The scan object created by calling Client#scan is used for executing record scans on the specified namespace and set (optional). Scans can return a set of records as a RecordStream or apply an Aerospike UDF (user-defined function) on each of the records on the server.
Scan is obsolete in server 6.0
Use query methods implemented by Client#query. For more information, please refer to the section on ⇑Historical evolution of scan features in the Aerospike technical documentation.
Selecting Bins
Using Scan#select it is possible to select a subset of bins which should be returned by the query. If no bins are selected, then the whole record will be returned. If the Scan#nobins property is set to
true
the only the record meta data (ttl, generation, etc.) will be returned.Executing a Scan
A scan is executed using Scan#foreach. The method returns a RecordStream which emits a
data
event for each record returned by the scan. The scan can be aborted at any time by calling RecordStream#abort.Executing Record UDFs using Background Scans
Record UDFs perform commands on a single record such as updating records based on a set of parameters. Using Scan#background you can run a Record UDF on the result set of a scan. Scans using Records UDFs are run in the background on the server and do not return the records to the client.
For additional information please refer to the section on ⇑Record UDFs in the Aerospike technical documentation.
Scan pagination
Scan pagination allows for queries return records in pages rather than all at once. To enable scan pagination, the scan property Scan#paginate must be true and the previously stated scan policy ScanPolicy#maxRecords must be set to a nonzero positive integer in order to specify a maximum page size.
When a page is complete, RecordStream event 'error' will emit a Scan#scanState object containing a serialized version of the scan. This serialized scan, if be assigned back to Scan#scanState, allows the scan to retrieve the next page of records in the scan upon calling Scan#foreach. If 'error' emits an
undefined
object, either Scan#paginate is nottrue
, or the scan has successfully returned all the specified records.For additional information and examples, please refer to the Scan#paginate section below.
Param: client
A client instance.
Param: ns
The namescape.
Param: set
The name of a set.
Param: options
Scan parameters.
Param: options.select
List of bin names to select. See Scan#select.
Param: options.nobins
Whether only meta data should be returned. See Scan#nobins.
Param: options.concurrent
Whether all cluster nodes should be scanned concurrently. See Scan#concurrent.
Param: options.ttl
The time-to-live (expiration) of the record in seconds. See Scan#ttl.
See
Client#scan to create new instances of this class.
Since
v2.0
Example