hyperlog-join v2.0.1
hyperlog-join
relational joins over a hyperlog
example
In this example, we can associate a changeset foreign key with changeset
documents.
var join = require('hyperlog-join')
var hyperlog = require('hyperlog')
var memdb = require('memdb')
var log = hyperlog(memdb(), { valueEncoding: 'json' })
var j = join({
log: log,
db: memdb(),
map: function (row, cb) {
var v = row.value
if (v.changeset) cb(null, { key: v.changeset, value: v.id })
else cb()
}
})
log.append({ id: 'A', type: 'changeset', tags: { comment: 'whatever' } })
log.append({ id: 'B', type: 'node', lat: 64.4, lon: -147.3, changeset: 'A' })
log.append({ id: 'C', type: 'node', lat: 63.9, lon: -147.6, changeset: 'A' })
log.append({ id: 'D', type: 'changeset', tags: { comment: 'hey' } })
log.append({ id: 'E', type: 'node', lat: 64.2, lon: -146.5, changeset: 'D' })
j.list('A', function (err, nodes) {
console.log(nodes)
})output:
[ { key: '022116bee40416e057ed404eae77a998eb8da3a2662e22e2f3f666a558519fb7',
value: 'C' },
{ key: 'b66ea5345fd95776ddb1e6ae1a6627f0c0c45dff04e9d3b3a8e1ab3d32963d84',
value: 'B' } ]api
var join = require('hyperlog-join')var j = join(opts)
opts.log- hyperlog instanceopts.db- levelup handleopts.map(row, cb)- async mapping function to join elements with a foreign key
The mapping function accepts a row argument from the hyperlog and should
return a single object with key and value properties or an array of
key/value objects into the callback cb(err, res).
To delete relations, the mapping function should return an object with
type='del', a key specifying the foreign key as in the put case, and a
rowKey of the hyperlog key for the row that inserted the original relation.
var stream = j.list(key, cb)
Look up a list of values from the mapping function by their key.
This function returns a readable object stream of results or you can collect the
results with the cb(err, nodes) callback. Each object in the results has the
key of the original hyperlog document and the value set in the mapping
function.
var stream = j.relations(opts)
Return a readable stream of existing relations, the foreign keys set by
row.key in the mapping function.
These results can be filtered according to leveldb range options: opts.lt,
opts.gt, opts.lte, and opts.gte and limited in quantity with
opts.limit.
j.on('error', function (err) {})
Handle errors from the underlying hyperlog-index with the 'error' event.
install
npm install hyperlog-joinlicense
BSD