How to handle indices in Neo4j server via javascript REST client?

I have data in a standalone Neo4j REST server, including an index of nodes. I want pure JavaScript client to connect to Neo4j and serve the formatted data to d3.js, a visualisation library built on Node.js.

JugglingDB is very popular, but the Neo4j implementation was done "wrong": https://github.com/1602/jugglingdb/issues/56

The next most popular option on github is: https://github.com/thingdom/node-neo4j looking at the method definitions https://github.com/thingdom/node-neo4j/blob/develop/lib/GraphDatabase._coffee

I'm able to use "getNodeById: (id, _) ->"

> node1 = db.getNodeById(12, callback);

returns the output from the REST server, including node properties. Awesome.

I can't figure out how to use "getIndexedNodes: (index, property, value, _) ->"

> indexedNodes = db.getIndexedNodes:(index1, username, Homer, callback);
...

indexedNodes don't get defined. I've tried a few different combinations. No joy. How do I use this command?

Also, getIndexedNodes() requires a key-value pair. Is there any way to get all, or a subset of the items in the index without looping?

One of the authors/maintainers of node-neo4j here. =)

indexedNodes don't get defined. I've tried a few different combinations. No joy. How do I use this command?

Your example seems to have some syntax errors. Are index1, username and Homer variables defined elsewhere? Assuming not, i.e. assuming those are the actual index name, property name and value, they need to be quoted as string literals, e.g. 'index1', 'username' and 'Homer'. But you also have a colon right before the opening parenthesis that shouldn't be there. (That's what's causing the Node.js REPL to not understand your command.)

Then, note that indexedNodes should be undefined -- getIndexedNodes(), like most Node.js APIs, is asynchronous, so its return value is undefined. Hence the callback parameter.

You can see an example of how getIndexedNodes() is used in the sample node-neo4j-template app the README references:

https://github.com/aseemk/node-neo4j-template/blob/2012-03-01/models/user.js#L149-L160

Also, getIndexedNodes() requires a key-value pair. Is there any way to get all, or a subset of the items in the index without looping?

getIndexedNodes() does return all matching nodes, so there's no looping required. Getting a subset isn't supported by Neo4j's REST API directly, but you can achieve the result with Cypher.

E.g. to return the 6th-15th user (assuming they have a type property set to user) sorted alphabetically by username:

db.query([
  'START node=node:index1(type="user")',
  'RETURN node ORDER BY node.username',
  'SKIP 5 LIMIT 10'
].join('\n'), callback);

Cypher is still rapidly evolving, though, so be sure to reference the documentation that matches the Neo4j version you're using.

As mentioned above, in general, take a look at the sample node-neo4j-template app. It covers a breadth of features that the library exposes and that a typical app would need.

Hope this helps. =)

Neo4j 2 lets you do indices VIA REST. Docs here

REST Indicies