Read from an abstract-level
database using Node.js streams.
📌 To instead consume data using Web Streams, see
level-web-stream
.
If you are migrating from levelup
or level <= 7
: please see UPGRADING.md.
const { EntryStream } = require('level-read-stream')
const { Writable, pipeline } = require('readable-stream')
await db.put('a', '1')
await db.put('b', '2')
await db.put('c', '3')
const src = new EntryStream(db, {
gte: 'b'
})
const dst = new Writable({
write (entry, _, next) {
console.log('%s: %s', entry.key, entry.value)
next()
}
})
pipeline(src, dst)
Yields:
b: 2
c: 3
To only read keys or values rather than entries:
const { KeyStream, ValueStream } = require('level-read-stream')
pipeline(new KeyStream(db), new Writable({
write (key, _, next) {
console.log(key)
next()
}
}))
With npm do:
npm install level-read-stream
Usage from TypeScript also requires npm install @types/readable-stream
.
Create a readable stream that will yield entries. An entry is an object with key
and value
properties. The db
argument must be an abstract-level
database. The optional options
object may contain:
highWaterMark
(number): the maximum number of entries to buffer internally before ceasing to read further entries. Default 1000.
Any other options are forwarded to db.iterator(options)
. The stream wraps that iterator. If you prefer to consume entries with for await...of
then it's recommended to directly use db.iterator()
. In either case, most databases will read from a snapshot (thus unaffected by simultaneous writes) as indicated by db.supports.snapshots
.
Upon stream end or having called stream.destroy()
the underlying iterator will be closed after which a close
event is emitted on the stream.
Same as EntryStream
but yields keys instead of entries, using db.keys()
instead of db.iterator()
. If only keys are needed, using KeyStream
may increase performance because values won't have to be fetched.
Same as EntryStream
but yields values instead of entries, using db.values()
instead of db.iterator()
. If only values are needed, using ValueStream
may increase performance because keys won't have to be fetched.
An instance of EntryStream
, KeyStream
or ValueStream
has the following special properties.
A read-only reference to the database that this stream is reading from.
Level/read-stream
is an OPEN Open Source Project. This means that:
Individuals making significant and valuable contributions are given commit-access to the project to contribute as they see fit. This project is more like an open wiki than a standard guarded open source project.
See the Contribution Guide for more details.
Support us with a monthly donation on Open Collective and help us continue our work.