level-indico

Simple indexing and querying for leveldb

level-indico

Create and manage indices for you leveldb database.

  • No generic query system, provides just some flexible low level methods to access indexed data. You can use those to build your custom queries.
  • Uses bytewise encoding for indices.
  • Supports automatic indexing (using hooks).
  • Works with changing fields.

//Indico require a sublevel-enabled db 
var db = indico(sublevel(level('db', { valueEncoding: 'json' }));
 
//set indices on a sublevel 
var posts = db.sublevel('posts');
 
//set a single index 
db.ensureIndex('title');
db.ensureIndex('commentCount');
//set a compound index 
db.ensureIndex('title', 'commentCount');
 
//[...] Put some data 
 
//Now query... 
 
//Find all all posts having title = "Hello" 
db.findBy(['title'], {start: ['Hello'], end: ['Hello']}, function (errdata) {
  //... 
});
 
//Find all all posts having title = "Hello" AND commentCount >= "1" 
db.findBy(['title', 'commentCount'], {start: ['Hello', 1], end: ['Hello', undefined]}, function (errdata) {
  //... 
});
 
//Get all posts sorted by commentCount desc 
db.findBy(['commentCount'], {start: [null], end: [undefined]}, function (errdata) {
  //... 
});
 
//Streaming version 
db.streamBy(['commentCount'], {start: [null], end: [undefined]})
.on('data', function(data) {
//... 
})
.on('close, function() {
//...
})