SlideShare ist ein Scribd-Unternehmen logo
1 von 35
Copyright © 2016 M/Gateway Developments Ltd
EWD 3 Training Course
Part 23
JavaScript Abstraction of Global Storage:
(d) Traversing a Range of Nodes
Rob Tweed
Director, M/Gateway Developments Ltd
Twitter: @rtweed
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Restricting a Loop to Specific Nodes
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Restricting a Loop to Specific Nodes
Just get names starting Br
-Briggs
-Bryant
Then fetch the data record for each instance
of the name
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Restricting a Loop to Specific Nodes
forEachChild( {prefix: 'Br'} , function{..})
Use the control object argument again
This time limit the loop to a prefix
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Restricting a Loop to Specific Nodes
var index = new this.documentStore.DocumentNode('myIndex');
index.forEachChild({prefix: 'Br}', function(nodeName, childNode) {
// limit the traversal to just those child nodes whose names start Br
});
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Restricting a Loop to Specific Nodes
var index = new this.documentStore.DocumentNode('myIndex');
index.forEachChild({prefix: 'Br}', function(nodeName, childNode) {
childNode.forEachChild(function(id) {
// get each id for each name beginning Br
});
});
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Restricting a Loop to Specific Nodes
var index = new this.documentStore.DocumentNode('myIndex');
index.forEachChild({prefix: 'Br}', function(nodeName, childNode) {
childNode.forEachChild(function(id) {
console.log(id);
});
});
210
386
23
5321
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Index for an Customer Document
customer(id, property) = value
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Index for an Customer Document
customer(id, property) = value
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Index for an Customer Document
customer(id, property) = value
customer = {
'386': {
firstName: 'John',
lastName: 'Briggs',
address: '123 Acacia Drive',
// …etc
},
// ….etc
}
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Index for an Customer Document
customer(id, property) = value
customer = {
'386': {
firstName: 'John',
lastName: 'Briggs',
address: '123 Acacia Drive',
// …etc
},
// ….etc
}
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Index for an Customer Document
customer(386,"firstName")="John"
customer(386,"lastName")="Briggs"
customer(386,"address")="123 Acacia Drive"
Customer document represented
in Global Storage
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Index for an Customer Document
customer(386,"firstName")="John"
customer(386,"lastName")="Briggs"
customer(386,"address")="123 Acacia Drive"
var index = new this.documentStore.DocumentNode('myIndex');
var customer = new this.documentStore.DocumentNode('customer');
index.forEachChild({prefix: 'Br}', function(nodeName, childNode) {
childNode.forEachChild(function(id) {
// use id to point to main data record
var address = customer.$(id).$('address').value;
// … etc
});
});
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Index for an Customer Document
customer(386,"firstName")="John"
customer(386,"lastName")="Briggs"
customer(386,"address")="123 Acacia Drive"
var index = new this.documentStore.DocumentNode('myIndex');
var customer = new this.documentStore.DocumentNode('customer');
index.forEachChild({prefix: 'Br}', function(nodeName, childNode) {
childNode.forEachChild(function(id) {
// use id to point to main data record
var address = customer.$(id).$('address').value;
// … etc
});
});
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Index for an Customer Document
customer(386,"firstName")="John"
customer(386,"lastName")="Briggs"
customer(386,"address")="123 Acacia Drive"
var index = new this.documentStore.DocumentNode('myIndex');
var customer = new this.documentStore.DocumentNode('customer');
index.forEachChild({prefix: 'Br}', function(nodeName, childNode) {
childNode.forEachChild(function(id) {
// use id to point to main data record
var address = customer.$(id).$('address').value;
// … etc
});
});
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Index for an Customer Document
customer(386,"firstName")="John"
customer(386,"lastName")="Briggs"
customer(386,"address")="123 Acacia Drive"
var index = new this.documentStore.DocumentNode('myIndex');
var customer = new this.documentStore.DocumentNode('customer');
index.forEachChild({prefix: 'Br}', function(nodeName, childNode) {
childNode.forEachChild(function(id) {
// use id to point to main data record
var address = customer.$(id).$('address').value;
// … etc
});
});
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Index for an Customer Document
customer(386,"firstName")="John"
customer(386,"lastName")="Briggs"
customer(386,"address")="123 Acacia Drive"
var index = new this.documentStore.DocumentNode('myIndex');
var customer = new this.documentStore.DocumentNode('customer');
index.forEachChild({prefix: 'Br}', function(nodeName, childNode) {
childNode.forEachChild(function(id) {
// use id to point to main data record
var address = customer.$(id).$('address').value;
// … etc
});
});
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Index for an Customer Document
customer(386,"firstName")="John"
customer(386,"lastName")="Briggs"
customer(386,"address")="123 Acacia Drive"
var index = new this.documentStore.DocumentNode('myIndex');
var customer = new this.documentStore.DocumentNode('customer');
index.forEachChild({prefix: 'Br}', function(nodeName, childNode) {
childNode.forEachChild(function(id) {
// use id to point to main data record
var address = customer.$(id).$('address').value;
// … etc
});
});
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Index for an Customer Document
customer(386,"firstName")="John"
customer(386,"lastName")="Briggs"
customer(386,"address")="123 Acacia Drive"
var index = new this.documentStore.DocumentNode('myIndex');
var customer = new this.documentStore.DocumentNode('customer');
index.forEachChild({prefix: 'Br}', function(nodeName, childNode) {
childNode.forEachChild(function(id) {
// use id to point to main data record
var address = customer.$(id).$('address').value;
// … etc
});
});
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Index for an Customer Document
customer(386,"firstName")="John"
customer(386,"lastName")="Briggs"
customer(386,"address")="123 Acacia Drive"
var index = new this.documentStore.DocumentNode('myIndex');
var customer = new this.documentStore.DocumentNode('customer');
index.forEachChild({prefix: 'Br}', function(nodeName, childNode) {
childNode.forEachChild(function(id) {
// use id to point to main data record
var address = customer.$(id).$('address').value;
// … etc
});
});
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Iterate Prefixes in Reverse Order?
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Iterate Prefixes in Reverse Order
var index = new this.documentStore.DocumentNode('myIndex');
var params = {prefix: 'Br', direction: 'reverse'} ;
index.forEachChild(params, function(name, childNode) {
childNode.forEachChild(function(id) {
console.log(id);
});
});
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Iterate Prefixes in Reverse Order
var index = new this.documentStore.DocumentNode('myIndex');
var params = {prefix: 'Br', direction: 'reverse'} ;
index.forEachChild(params, function(name, childNode) {
childNode.forEachChild(function(id) {
console.log(id);
});
});
Control object allows prefix to be
combined with reverse
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Iterate Prefixes in Reverse Order
var index = new this.documentStore.DocumentNode('myIndex');
var params = {prefix: 'Br', direction: 'reverse'} ;
index.forEachChild(params, function(name, childNode) {
childNode.forEachChild(function(id) {
console.log(id);
});
});
Control object allows prefix to be
combined with reverse
23
5321
210
386
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Iterate Prefixes in Reverse Order
var index = new this.documentStore.DocumentNode('myIndex');
var params = {prefix: 'Br', direction: 'reverse'} ;
index.forEachChild(params, function(name, childNode) {
childNode.forEachChild(function(id) {
console.log(id);
});
});
Control object allows prefix to be
combined with reverse
23
5321
210
386
Inner loop is in forward direction!
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Iterate Prefixes in Reverse Order
var index = new this.documentStore.DocumentNode('myIndex');
var params = {prefix: 'Br', direction: 'reverse'} ;
index.forEachChild(params, function(name, childNode) {
childNode.forEachChild( {direction: 'reverse'} , function(id) {
console.log(id);
});
});
Use the control object to reverse
the inner loop also
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Iterate Prefixes in Reverse Order
var index = new this.documentStore.DocumentNode('myIndex');
var params = {prefix: 'Br', direction: 'reverse'} ;
index.forEachChild(params, function(name, childNode) {
childNode.forEachChild( {direction: 'reverse'} , function(id) {
console.log(id);
});
});
Use the control object to reverse
the inner loop also
5321
23
386
210
Now the output is fully reversed
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Restricting the Loop to a Range
From: substring 1
To: substring 2
eg: from Briggs to Davis
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Restricting the Loop to a Range
forEachChild({
range: {
from: 'Briggs',
to: 'Davis'
}
}, function{..})
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Restricting the Loop to a Range
More likely restriction:
forEachChild({
range: {
from: 'Br',
to: 'Da'
}
}, function{..})
from and to define prefixes within which it returns nodes
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Restricting the Loop to a Range
or:
forEachChild({
range: {
from: 'B',
to: 'D'
}
}, function{..})
from and to define prefixes within which it returns nodes
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Restricting the Loop to a Range
var index = new this.documentStore.DocumentNode('myIndex');
var params = {
range: {
from: 'Br',
to: 'Da'
}
};
index.forEachChild(params, function(name, childNode) {
childNode.forEachChild(function(id) {
console.log(id);
});
});
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Restricting the Loop to a Range
var index = new this.documentStore.DocumentNode('myIndex');
var params = {
range: {
from: 'Br',
to: 'Da'
}
};
index.forEachChild(params, function(name, childNode) {
childNode.forEachChild(function(id) {
console.log(id);
});
}); 210
386
23
5321
641
714
13
8142
9112
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Iterating a Range in reverse?
Copyright © 2016 M/Gateway Developments Ltd
myIndex("Andrews",103)=""
myIndex("Barton",23)=""
myIndex("Briggs",210)=""
myIndex("Briggs",386)=""
myIndex("Bryant",23)=""
myIndex("Bryant",5321)=""
myIndex("Davies",641)=""
myIndex("Davies",714)=""
myIndex("Davis",13)=""
myIndex("Davis",8142)=""
myIndex("Davis",9112 )=""
myIndex("Douglas",651)=""
myIndex("Ennis",108)=""
myIndex("Ennis",712)=""
Iterating a Range in reverse
var index = new this.documentStore.DocumentNode('myIndex');
var params = {
direction: 'reverse',
range: {
from: 'Br',
to: 'Da'
}
};
index.forEachChild(params, function(name, childNode) {
childNode.forEachChild(function(id) {
console.log(id);
});
});
Control object allows range to be
combined with reverse

Weitere ähnliche Inhalte

Was ist angesagt?

JWT - To authentication and beyond!
JWT - To authentication and beyond!JWT - To authentication and beyond!
JWT - To authentication and beyond!Luís Cobucci
 
MongoDB Performance Tuning
MongoDB Performance TuningMongoDB Performance Tuning
MongoDB Performance TuningPuneet Behl
 
MongoDB Performance Debugging
MongoDB Performance DebuggingMongoDB Performance Debugging
MongoDB Performance DebuggingMongoDB
 
Peggy elasticsearch應用
Peggy elasticsearch應用Peggy elasticsearch應用
Peggy elasticsearch應用LearningTech
 
Getting Started with MongoDB and NodeJS
Getting Started with MongoDB and NodeJSGetting Started with MongoDB and NodeJS
Getting Started with MongoDB and NodeJSMongoDB
 
Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Remy Sharp
 
CouchDB on Rails - FrozenRails 2010
CouchDB on Rails - FrozenRails 2010CouchDB on Rails - FrozenRails 2010
CouchDB on Rails - FrozenRails 2010Jonathan Weiss
 
はじめてのMongoDB
はじめてのMongoDBはじめてのMongoDB
はじめてのMongoDBTakahiro Inoue
 
CouchDB on Rails - RailsWayCon 2010
CouchDB on Rails - RailsWayCon 2010CouchDB on Rails - RailsWayCon 2010
CouchDB on Rails - RailsWayCon 2010Jonathan Weiss
 
MongoDB .local Munich 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pip...
MongoDB .local Munich 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pip...MongoDB .local Munich 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pip...
MongoDB .local Munich 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pip...MongoDB
 
How to leverage what's new in MongoDB 3.6
How to leverage what's new in MongoDB 3.6How to leverage what's new in MongoDB 3.6
How to leverage what's new in MongoDB 3.6Maxime Beugnet
 
Reutov, yunusov, nagibin random numbers take ii
Reutov, yunusov, nagibin   random numbers take iiReutov, yunusov, nagibin   random numbers take ii
Reutov, yunusov, nagibin random numbers take iiDefconRussia
 
Mythbusting: Understanding How We Measure the Performance of MongoDB
Mythbusting: Understanding How We Measure the Performance of MongoDBMythbusting: Understanding How We Measure the Performance of MongoDB
Mythbusting: Understanding How We Measure the Performance of MongoDBMongoDB
 
Operational Intelligence with MongoDB Webinar
Operational Intelligence with MongoDB WebinarOperational Intelligence with MongoDB Webinar
Operational Intelligence with MongoDB WebinarMongoDB
 
MongoDB Live Hacking
MongoDB Live HackingMongoDB Live Hacking
MongoDB Live HackingTobias Trelle
 
CouchDB on Android
CouchDB on AndroidCouchDB on Android
CouchDB on AndroidSven Haiges
 
Agile Testing Days 2018 - API Fundamentals - postman collection
Agile Testing Days 2018 - API Fundamentals - postman collectionAgile Testing Days 2018 - API Fundamentals - postman collection
Agile Testing Days 2018 - API Fundamentals - postman collectionJoEllen Carter
 
Back to Basics Webinar 5: Introduction to the Aggregation Framework
Back to Basics Webinar 5: Introduction to the Aggregation FrameworkBack to Basics Webinar 5: Introduction to the Aggregation Framework
Back to Basics Webinar 5: Introduction to the Aggregation FrameworkMongoDB
 
Joins and Other Aggregation Enhancements Coming in MongoDB 3.2
Joins and Other Aggregation Enhancements Coming in MongoDB 3.2Joins and Other Aggregation Enhancements Coming in MongoDB 3.2
Joins and Other Aggregation Enhancements Coming in MongoDB 3.2MongoDB
 

Was ist angesagt? (20)

JWT - To authentication and beyond!
JWT - To authentication and beyond!JWT - To authentication and beyond!
JWT - To authentication and beyond!
 
MongoDB Performance Tuning
MongoDB Performance TuningMongoDB Performance Tuning
MongoDB Performance Tuning
 
MongoDB Performance Debugging
MongoDB Performance DebuggingMongoDB Performance Debugging
MongoDB Performance Debugging
 
Peggy elasticsearch應用
Peggy elasticsearch應用Peggy elasticsearch應用
Peggy elasticsearch應用
 
Getting Started with MongoDB and NodeJS
Getting Started with MongoDB and NodeJSGetting Started with MongoDB and NodeJS
Getting Started with MongoDB and NodeJS
 
Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)Is HTML5 Ready? (workshop)
Is HTML5 Ready? (workshop)
 
CouchDB on Rails
CouchDB on RailsCouchDB on Rails
CouchDB on Rails
 
CouchDB on Rails - FrozenRails 2010
CouchDB on Rails - FrozenRails 2010CouchDB on Rails - FrozenRails 2010
CouchDB on Rails - FrozenRails 2010
 
はじめてのMongoDB
はじめてのMongoDBはじめてのMongoDB
はじめてのMongoDB
 
CouchDB on Rails - RailsWayCon 2010
CouchDB on Rails - RailsWayCon 2010CouchDB on Rails - RailsWayCon 2010
CouchDB on Rails - RailsWayCon 2010
 
MongoDB .local Munich 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pip...
MongoDB .local Munich 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pip...MongoDB .local Munich 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pip...
MongoDB .local Munich 2019: Aggregation Pipeline Power++: How MongoDB 4.2 Pip...
 
How to leverage what's new in MongoDB 3.6
How to leverage what's new in MongoDB 3.6How to leverage what's new in MongoDB 3.6
How to leverage what's new in MongoDB 3.6
 
Reutov, yunusov, nagibin random numbers take ii
Reutov, yunusov, nagibin   random numbers take iiReutov, yunusov, nagibin   random numbers take ii
Reutov, yunusov, nagibin random numbers take ii
 
Mythbusting: Understanding How We Measure the Performance of MongoDB
Mythbusting: Understanding How We Measure the Performance of MongoDBMythbusting: Understanding How We Measure the Performance of MongoDB
Mythbusting: Understanding How We Measure the Performance of MongoDB
 
Operational Intelligence with MongoDB Webinar
Operational Intelligence with MongoDB WebinarOperational Intelligence with MongoDB Webinar
Operational Intelligence with MongoDB Webinar
 
MongoDB Live Hacking
MongoDB Live HackingMongoDB Live Hacking
MongoDB Live Hacking
 
CouchDB on Android
CouchDB on AndroidCouchDB on Android
CouchDB on Android
 
Agile Testing Days 2018 - API Fundamentals - postman collection
Agile Testing Days 2018 - API Fundamentals - postman collectionAgile Testing Days 2018 - API Fundamentals - postman collection
Agile Testing Days 2018 - API Fundamentals - postman collection
 
Back to Basics Webinar 5: Introduction to the Aggregation Framework
Back to Basics Webinar 5: Introduction to the Aggregation FrameworkBack to Basics Webinar 5: Introduction to the Aggregation Framework
Back to Basics Webinar 5: Introduction to the Aggregation Framework
 
Joins and Other Aggregation Enhancements Coming in MongoDB 3.2
Joins and Other Aggregation Enhancements Coming in MongoDB 3.2Joins and Other Aggregation Enhancements Coming in MongoDB 3.2
Joins and Other Aggregation Enhancements Coming in MongoDB 3.2
 

Andere mochten auch

Node.js: its potential in healthcare
Node.js: its potential in healthcareNode.js: its potential in healthcare
Node.js: its potential in healthcareRob Tweed
 
qewd-ripple: The Ripple OSI Middle Tier
qewd-ripple: The Ripple OSI Middle Tierqewd-ripple: The Ripple OSI Middle Tier
qewd-ripple: The Ripple OSI Middle TierRob Tweed
 
Mumps the Internet scale database
Mumps the Internet scale databaseMumps the Internet scale database
Mumps the Internet scale databasegeorge.james
 
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3Rob Tweed
 
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 4
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 4EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 4
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 4Rob Tweed
 
EWD 3 Training Course Part 22: Traversing Documents using DocumentNode Objects
EWD 3 Training Course Part 22: Traversing Documents using DocumentNode ObjectsEWD 3 Training Course Part 22: Traversing Documents using DocumentNode Objects
EWD 3 Training Course Part 22: Traversing Documents using DocumentNode ObjectsRob Tweed
 
EWD 3 Training Course Part 30: Modularising QEWD Applications
EWD 3 Training Course Part 30: Modularising QEWD ApplicationsEWD 3 Training Course Part 30: Modularising QEWD Applications
EWD 3 Training Course Part 30: Modularising QEWD ApplicationsRob Tweed
 
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 2
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 2EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 2
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 2Rob Tweed
 
EWD 3 Training Course Part 18: Modelling NoSQL Databases using Global Storage
EWD 3 Training Course Part 18: Modelling NoSQL Databases using Global StorageEWD 3 Training Course Part 18: Modelling NoSQL Databases using Global Storage
EWD 3 Training Course Part 18: Modelling NoSQL Databases using Global StorageRob Tweed
 
EWD 3 Training Course Part 16: QEWD Services
EWD 3 Training Course Part 16: QEWD ServicesEWD 3 Training Course Part 16: QEWD Services
EWD 3 Training Course Part 16: QEWD ServicesRob Tweed
 
EWD 3 Training Course Part 26: Event-driven Indexing
EWD 3 Training Course Part 26: Event-driven IndexingEWD 3 Training Course Part 26: Event-driven Indexing
EWD 3 Training Course Part 26: Event-driven IndexingRob Tweed
 
EWD 3 Training Course Part 31: Using QEWD for Web and REST Services
EWD 3 Training Course Part 31: Using QEWD for Web and REST ServicesEWD 3 Training Course Part 31: Using QEWD for Web and REST Services
EWD 3 Training Course Part 31: Using QEWD for Web and REST ServicesRob Tweed
 
EWD 3 Training Course Part 27: The QEWD Session
EWD 3 Training Course Part 27: The QEWD SessionEWD 3 Training Course Part 27: The QEWD Session
EWD 3 Training Course Part 27: The QEWD SessionRob Tweed
 
EWD 3 Training Course Part 19: The cache.node APIs
EWD 3 Training Course Part 19: The cache.node APIsEWD 3 Training Course Part 19: The cache.node APIs
EWD 3 Training Course Part 19: The cache.node APIsRob Tweed
 
EWD 3 Training Course Part 28: Integrating Legacy Mumps Code with QEWD
EWD 3 Training Course Part 28: Integrating Legacy Mumps Code with QEWDEWD 3 Training Course Part 28: Integrating Legacy Mumps Code with QEWD
EWD 3 Training Course Part 28: Integrating Legacy Mumps Code with QEWDRob Tweed
 
EWD 3 Training Course Part 20: The DocumentNode Object
EWD 3 Training Course Part 20: The DocumentNode ObjectEWD 3 Training Course Part 20: The DocumentNode Object
EWD 3 Training Course Part 20: The DocumentNode ObjectRob Tweed
 
EWD 3 Training Course Part 37: Building a React.js application with ewd-xpres...
EWD 3 Training Course Part 37: Building a React.js application with ewd-xpres...EWD 3 Training Course Part 37: Building a React.js application with ewd-xpres...
EWD 3 Training Course Part 37: Building a React.js application with ewd-xpres...Rob Tweed
 
EWD 3 Training Course Part 41: Building a React.js application with QEWD, Part 5
EWD 3 Training Course Part 41: Building a React.js application with QEWD, Part 5EWD 3 Training Course Part 41: Building a React.js application with QEWD, Part 5
EWD 3 Training Course Part 41: Building a React.js application with QEWD, Part 5Rob Tweed
 

Andere mochten auch (18)

Node.js: its potential in healthcare
Node.js: its potential in healthcareNode.js: its potential in healthcare
Node.js: its potential in healthcare
 
qewd-ripple: The Ripple OSI Middle Tier
qewd-ripple: The Ripple OSI Middle Tierqewd-ripple: The Ripple OSI Middle Tier
qewd-ripple: The Ripple OSI Middle Tier
 
Mumps the Internet scale database
Mumps the Internet scale databaseMumps the Internet scale database
Mumps the Internet scale database
 
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
EWD 3 Training Course Part 39: Building a React.js application with QEWD, Part 3
 
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 4
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 4EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 4
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 4
 
EWD 3 Training Course Part 22: Traversing Documents using DocumentNode Objects
EWD 3 Training Course Part 22: Traversing Documents using DocumentNode ObjectsEWD 3 Training Course Part 22: Traversing Documents using DocumentNode Objects
EWD 3 Training Course Part 22: Traversing Documents using DocumentNode Objects
 
EWD 3 Training Course Part 30: Modularising QEWD Applications
EWD 3 Training Course Part 30: Modularising QEWD ApplicationsEWD 3 Training Course Part 30: Modularising QEWD Applications
EWD 3 Training Course Part 30: Modularising QEWD Applications
 
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 2
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 2EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 2
EWD 3 Training Course Part 38: Building a React.js application with QEWD, Part 2
 
EWD 3 Training Course Part 18: Modelling NoSQL Databases using Global Storage
EWD 3 Training Course Part 18: Modelling NoSQL Databases using Global StorageEWD 3 Training Course Part 18: Modelling NoSQL Databases using Global Storage
EWD 3 Training Course Part 18: Modelling NoSQL Databases using Global Storage
 
EWD 3 Training Course Part 16: QEWD Services
EWD 3 Training Course Part 16: QEWD ServicesEWD 3 Training Course Part 16: QEWD Services
EWD 3 Training Course Part 16: QEWD Services
 
EWD 3 Training Course Part 26: Event-driven Indexing
EWD 3 Training Course Part 26: Event-driven IndexingEWD 3 Training Course Part 26: Event-driven Indexing
EWD 3 Training Course Part 26: Event-driven Indexing
 
EWD 3 Training Course Part 31: Using QEWD for Web and REST Services
EWD 3 Training Course Part 31: Using QEWD for Web and REST ServicesEWD 3 Training Course Part 31: Using QEWD for Web and REST Services
EWD 3 Training Course Part 31: Using QEWD for Web and REST Services
 
EWD 3 Training Course Part 27: The QEWD Session
EWD 3 Training Course Part 27: The QEWD SessionEWD 3 Training Course Part 27: The QEWD Session
EWD 3 Training Course Part 27: The QEWD Session
 
EWD 3 Training Course Part 19: The cache.node APIs
EWD 3 Training Course Part 19: The cache.node APIsEWD 3 Training Course Part 19: The cache.node APIs
EWD 3 Training Course Part 19: The cache.node APIs
 
EWD 3 Training Course Part 28: Integrating Legacy Mumps Code with QEWD
EWD 3 Training Course Part 28: Integrating Legacy Mumps Code with QEWDEWD 3 Training Course Part 28: Integrating Legacy Mumps Code with QEWD
EWD 3 Training Course Part 28: Integrating Legacy Mumps Code with QEWD
 
EWD 3 Training Course Part 20: The DocumentNode Object
EWD 3 Training Course Part 20: The DocumentNode ObjectEWD 3 Training Course Part 20: The DocumentNode Object
EWD 3 Training Course Part 20: The DocumentNode Object
 
EWD 3 Training Course Part 37: Building a React.js application with ewd-xpres...
EWD 3 Training Course Part 37: Building a React.js application with ewd-xpres...EWD 3 Training Course Part 37: Building a React.js application with ewd-xpres...
EWD 3 Training Course Part 37: Building a React.js application with ewd-xpres...
 
EWD 3 Training Course Part 41: Building a React.js application with QEWD, Part 5
EWD 3 Training Course Part 41: Building a React.js application with QEWD, Part 5EWD 3 Training Course Part 41: Building a React.js application with QEWD, Part 5
EWD 3 Training Course Part 41: Building a React.js application with QEWD, Part 5
 

Ähnlich wie EWD 3 Training Course Part 23: Traversing a Range using DocumentNode Objects

MongoDB for Analytics
MongoDB for AnalyticsMongoDB for Analytics
MongoDB for AnalyticsMongoDB
 
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2MongoDB
 
MongoDB .local Chicago 2019: Using Client Side Encryption in MongoDB 4.2
MongoDB .local Chicago 2019: Using Client Side Encryption in MongoDB 4.2MongoDB .local Chicago 2019: Using Client Side Encryption in MongoDB 4.2
MongoDB .local Chicago 2019: Using Client Side Encryption in MongoDB 4.2MongoDB
 
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2MongoDB
 
MongoDB World 2019: Exploring your MongoDB Data with Pirates (R) and Snakes (...
MongoDB World 2019: Exploring your MongoDB Data with Pirates (R) and Snakes (...MongoDB World 2019: Exploring your MongoDB Data with Pirates (R) and Snakes (...
MongoDB World 2019: Exploring your MongoDB Data with Pirates (R) and Snakes (...MongoDB
 
Running Production MongoDB Lightning Talk
Running Production MongoDB Lightning TalkRunning Production MongoDB Lightning Talk
Running Production MongoDB Lightning Talkchrisckchang
 
MongoDB .local London 2019: Best Practices for Working with IoT and Time-seri...
MongoDB .local London 2019: Best Practices for Working with IoT and Time-seri...MongoDB .local London 2019: Best Practices for Working with IoT and Time-seri...
MongoDB .local London 2019: Best Practices for Working with IoT and Time-seri...MongoDB
 
MongoDB .local Houston 2019: Best Practices for Working with IoT and Time-ser...
MongoDB .local Houston 2019: Best Practices for Working with IoT and Time-ser...MongoDB .local Houston 2019: Best Practices for Working with IoT and Time-ser...
MongoDB .local Houston 2019: Best Practices for Working with IoT and Time-ser...MongoDB
 

Ähnlich wie EWD 3 Training Course Part 23: Traversing a Range using DocumentNode Objects (9)

MongoDB for Analytics
MongoDB for AnalyticsMongoDB for Analytics
MongoDB for Analytics
 
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
MongoDB .local San Francisco 2020: Using Client Side Encryption in MongoDB 4.2
 
MongoDB .local Chicago 2019: Using Client Side Encryption in MongoDB 4.2
MongoDB .local Chicago 2019: Using Client Side Encryption in MongoDB 4.2MongoDB .local Chicago 2019: Using Client Side Encryption in MongoDB 4.2
MongoDB .local Chicago 2019: Using Client Side Encryption in MongoDB 4.2
 
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
MongoDB .local Houston 2019: Using Client Side Encryption in MongoDB 4.2
 
MongoDB World 2019: Exploring your MongoDB Data with Pirates (R) and Snakes (...
MongoDB World 2019: Exploring your MongoDB Data with Pirates (R) and Snakes (...MongoDB World 2019: Exploring your MongoDB Data with Pirates (R) and Snakes (...
MongoDB World 2019: Exploring your MongoDB Data with Pirates (R) and Snakes (...
 
Running Production MongoDB Lightning Talk
Running Production MongoDB Lightning TalkRunning Production MongoDB Lightning Talk
Running Production MongoDB Lightning Talk
 
MongoDB .local London 2019: Best Practices for Working with IoT and Time-seri...
MongoDB .local London 2019: Best Practices for Working with IoT and Time-seri...MongoDB .local London 2019: Best Practices for Working with IoT and Time-seri...
MongoDB .local London 2019: Best Practices for Working with IoT and Time-seri...
 
MongoDB .local Houston 2019: Best Practices for Working with IoT and Time-ser...
MongoDB .local Houston 2019: Best Practices for Working with IoT and Time-ser...MongoDB .local Houston 2019: Best Practices for Working with IoT and Time-ser...
MongoDB .local Houston 2019: Best Practices for Working with IoT and Time-ser...
 
Indexing
IndexingIndexing
Indexing
 

Mehr von Rob Tweed

Data Persistence as a Language Feature
Data Persistence as a Language FeatureData Persistence as a Language Feature
Data Persistence as a Language FeatureRob Tweed
 
LNUG: Having Your Node.js Cake and Eating It Too
LNUG: Having Your Node.js Cake and Eating It TooLNUG: Having Your Node.js Cake and Eating It Too
LNUG: Having Your Node.js Cake and Eating It TooRob Tweed
 
EWD 3 Training Course Part 45: Using QEWD's Advanced MicroService Functionality
EWD 3 Training Course Part 45: Using QEWD's Advanced MicroService FunctionalityEWD 3 Training Course Part 45: Using QEWD's Advanced MicroService Functionality
EWD 3 Training Course Part 45: Using QEWD's Advanced MicroService FunctionalityRob Tweed
 
EWD 3 Training Course Part 44: Creating MicroServices with QEWD.js
EWD 3 Training Course Part 44: Creating MicroServices with QEWD.jsEWD 3 Training Course Part 44: Creating MicroServices with QEWD.js
EWD 3 Training Course Part 44: Creating MicroServices with QEWD.jsRob Tweed
 
EWD 3 Training Course Part 43: Using JSON Web Tokens with QEWD REST Services
EWD 3 Training Course Part 43: Using JSON Web Tokens with QEWD REST ServicesEWD 3 Training Course Part 43: Using JSON Web Tokens with QEWD REST Services
EWD 3 Training Course Part 43: Using JSON Web Tokens with QEWD REST ServicesRob Tweed
 
QEWD.js, JSON Web Tokens & MicroServices
QEWD.js, JSON Web Tokens & MicroServicesQEWD.js, JSON Web Tokens & MicroServices
QEWD.js, JSON Web Tokens & MicroServicesRob Tweed
 
QEWD.js: Have your Node.js Cake and Eat It Too
QEWD.js: Have your Node.js Cake and Eat It TooQEWD.js: Have your Node.js Cake and Eat It Too
QEWD.js: Have your Node.js Cake and Eat It TooRob Tweed
 
ewd-qoper8-vistarpc: Exposing VistA's RPCs as REST Services
ewd-qoper8-vistarpc: Exposing VistA's RPCs as REST Servicesewd-qoper8-vistarpc: Exposing VistA's RPCs as REST Services
ewd-qoper8-vistarpc: Exposing VistA's RPCs as REST ServicesRob Tweed
 
EWD 3 Training Course Part 42: The QEWD Docker Appliance
EWD 3 Training Course Part 42: The QEWD Docker ApplianceEWD 3 Training Course Part 42: The QEWD Docker Appliance
EWD 3 Training Course Part 42: The QEWD Docker ApplianceRob Tweed
 
EWD 3 Training Course Part 5b: First Steps in Building a QEWD Application
EWD 3 Training Course Part 5b: First Steps in Building a QEWD ApplicationEWD 3 Training Course Part 5b: First Steps in Building a QEWD Application
EWD 3 Training Course Part 5b: First Steps in Building a QEWD ApplicationRob Tweed
 
EWD 3 Training Course Part 36: Accessing REST and Web Services from a QEWD ap...
EWD 3 Training Course Part 36: Accessing REST and Web Services from a QEWD ap...EWD 3 Training Course Part 36: Accessing REST and Web Services from a QEWD ap...
EWD 3 Training Course Part 36: Accessing REST and Web Services from a QEWD ap...Rob Tweed
 
EWD 3 Training Course Part 35: QEWD Session Locking
EWD 3 Training Course Part 35: QEWD Session LockingEWD 3 Training Course Part 35: QEWD Session Locking
EWD 3 Training Course Part 35: QEWD Session LockingRob Tweed
 
EWD 3 Training Course Part 34: QEWD Resilient Mode
EWD 3 Training Course Part 34: QEWD Resilient ModeEWD 3 Training Course Part 34: QEWD Resilient Mode
EWD 3 Training Course Part 34: QEWD Resilient ModeRob Tweed
 
EWD 3 Training Course Part 33: Configuring QEWD to use CORS
EWD 3 Training Course Part 33: Configuring QEWD to use CORSEWD 3 Training Course Part 33: Configuring QEWD to use CORS
EWD 3 Training Course Part 33: Configuring QEWD to use CORSRob Tweed
 
EWD 3 Training Course Part 32: Configuring QEWD to use SSL/HTTPS
EWD 3 Training Course Part 32: Configuring QEWD to use SSL/HTTPSEWD 3 Training Course Part 32: Configuring QEWD to use SSL/HTTPS
EWD 3 Training Course Part 32: Configuring QEWD to use SSL/HTTPSRob Tweed
 
EWD 3 Training Course Part 29: Running QEWD as a Service
EWD 3 Training Course Part 29: Running QEWD as a ServiceEWD 3 Training Course Part 29: Running QEWD as a Service
EWD 3 Training Course Part 29: Running QEWD as a ServiceRob Tweed
 

Mehr von Rob Tweed (17)

QEWD Update
QEWD UpdateQEWD Update
QEWD Update
 
Data Persistence as a Language Feature
Data Persistence as a Language FeatureData Persistence as a Language Feature
Data Persistence as a Language Feature
 
LNUG: Having Your Node.js Cake and Eating It Too
LNUG: Having Your Node.js Cake and Eating It TooLNUG: Having Your Node.js Cake and Eating It Too
LNUG: Having Your Node.js Cake and Eating It Too
 
EWD 3 Training Course Part 45: Using QEWD's Advanced MicroService Functionality
EWD 3 Training Course Part 45: Using QEWD's Advanced MicroService FunctionalityEWD 3 Training Course Part 45: Using QEWD's Advanced MicroService Functionality
EWD 3 Training Course Part 45: Using QEWD's Advanced MicroService Functionality
 
EWD 3 Training Course Part 44: Creating MicroServices with QEWD.js
EWD 3 Training Course Part 44: Creating MicroServices with QEWD.jsEWD 3 Training Course Part 44: Creating MicroServices with QEWD.js
EWD 3 Training Course Part 44: Creating MicroServices with QEWD.js
 
EWD 3 Training Course Part 43: Using JSON Web Tokens with QEWD REST Services
EWD 3 Training Course Part 43: Using JSON Web Tokens with QEWD REST ServicesEWD 3 Training Course Part 43: Using JSON Web Tokens with QEWD REST Services
EWD 3 Training Course Part 43: Using JSON Web Tokens with QEWD REST Services
 
QEWD.js, JSON Web Tokens & MicroServices
QEWD.js, JSON Web Tokens & MicroServicesQEWD.js, JSON Web Tokens & MicroServices
QEWD.js, JSON Web Tokens & MicroServices
 
QEWD.js: Have your Node.js Cake and Eat It Too
QEWD.js: Have your Node.js Cake and Eat It TooQEWD.js: Have your Node.js Cake and Eat It Too
QEWD.js: Have your Node.js Cake and Eat It Too
 
ewd-qoper8-vistarpc: Exposing VistA's RPCs as REST Services
ewd-qoper8-vistarpc: Exposing VistA's RPCs as REST Servicesewd-qoper8-vistarpc: Exposing VistA's RPCs as REST Services
ewd-qoper8-vistarpc: Exposing VistA's RPCs as REST Services
 
EWD 3 Training Course Part 42: The QEWD Docker Appliance
EWD 3 Training Course Part 42: The QEWD Docker ApplianceEWD 3 Training Course Part 42: The QEWD Docker Appliance
EWD 3 Training Course Part 42: The QEWD Docker Appliance
 
EWD 3 Training Course Part 5b: First Steps in Building a QEWD Application
EWD 3 Training Course Part 5b: First Steps in Building a QEWD ApplicationEWD 3 Training Course Part 5b: First Steps in Building a QEWD Application
EWD 3 Training Course Part 5b: First Steps in Building a QEWD Application
 
EWD 3 Training Course Part 36: Accessing REST and Web Services from a QEWD ap...
EWD 3 Training Course Part 36: Accessing REST and Web Services from a QEWD ap...EWD 3 Training Course Part 36: Accessing REST and Web Services from a QEWD ap...
EWD 3 Training Course Part 36: Accessing REST and Web Services from a QEWD ap...
 
EWD 3 Training Course Part 35: QEWD Session Locking
EWD 3 Training Course Part 35: QEWD Session LockingEWD 3 Training Course Part 35: QEWD Session Locking
EWD 3 Training Course Part 35: QEWD Session Locking
 
EWD 3 Training Course Part 34: QEWD Resilient Mode
EWD 3 Training Course Part 34: QEWD Resilient ModeEWD 3 Training Course Part 34: QEWD Resilient Mode
EWD 3 Training Course Part 34: QEWD Resilient Mode
 
EWD 3 Training Course Part 33: Configuring QEWD to use CORS
EWD 3 Training Course Part 33: Configuring QEWD to use CORSEWD 3 Training Course Part 33: Configuring QEWD to use CORS
EWD 3 Training Course Part 33: Configuring QEWD to use CORS
 
EWD 3 Training Course Part 32: Configuring QEWD to use SSL/HTTPS
EWD 3 Training Course Part 32: Configuring QEWD to use SSL/HTTPSEWD 3 Training Course Part 32: Configuring QEWD to use SSL/HTTPS
EWD 3 Training Course Part 32: Configuring QEWD to use SSL/HTTPS
 
EWD 3 Training Course Part 29: Running QEWD as a Service
EWD 3 Training Course Part 29: Running QEWD as a ServiceEWD 3 Training Course Part 29: Running QEWD as a Service
EWD 3 Training Course Part 29: Running QEWD as a Service
 

Kürzlich hochgeladen

WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsArshad QA
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnAmarnathKambale
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyviewmasabamasaba
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech studentsHimanshiGarg82
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastPapp Krisztián
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplatePresentation.STUDIO
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfkalichargn70th171
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...masabamasaba
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Bert Jan Schrijver
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...Shane Coughlan
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park masabamasaba
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareJim McKeeth
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...masabamasaba
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...Jittipong Loespradit
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Hararemasabamasaba
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsJhone kinadey
 

Kürzlich hochgeladen (20)

WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
WSO2Con2024 - From Code To Cloud: Fast Track Your Cloud Native Journey with C...
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
%in Hazyview+277-882-255-28 abortion pills for sale in Hazyview
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
%+27788225528 love spells in Huntington Beach Psychic Readings, Attraction sp...
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
WSO2CON 2024 - Cloud Native Middleware: Domain-Driven Design, Cell-Based Arch...
 
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
MarTech Trend 2024 Book : Marketing Technology Trends (2024 Edition) How Data...
 
%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare%in Harare+277-882-255-28 abortion pills for sale in Harare
%in Harare+277-882-255-28 abortion pills for sale in Harare
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 

EWD 3 Training Course Part 23: Traversing a Range using DocumentNode Objects

  • 1. Copyright © 2016 M/Gateway Developments Ltd EWD 3 Training Course Part 23 JavaScript Abstraction of Global Storage: (d) Traversing a Range of Nodes Rob Tweed Director, M/Gateway Developments Ltd Twitter: @rtweed
  • 2. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Restricting a Loop to Specific Nodes
  • 3. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Restricting a Loop to Specific Nodes Just get names starting Br -Briggs -Bryant Then fetch the data record for each instance of the name
  • 4. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Restricting a Loop to Specific Nodes forEachChild( {prefix: 'Br'} , function{..}) Use the control object argument again This time limit the loop to a prefix
  • 5. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Restricting a Loop to Specific Nodes var index = new this.documentStore.DocumentNode('myIndex'); index.forEachChild({prefix: 'Br}', function(nodeName, childNode) { // limit the traversal to just those child nodes whose names start Br });
  • 6. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Restricting a Loop to Specific Nodes var index = new this.documentStore.DocumentNode('myIndex'); index.forEachChild({prefix: 'Br}', function(nodeName, childNode) { childNode.forEachChild(function(id) { // get each id for each name beginning Br }); });
  • 7. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Restricting a Loop to Specific Nodes var index = new this.documentStore.DocumentNode('myIndex'); index.forEachChild({prefix: 'Br}', function(nodeName, childNode) { childNode.forEachChild(function(id) { console.log(id); }); }); 210 386 23 5321
  • 8. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Index for an Customer Document customer(id, property) = value
  • 9. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Index for an Customer Document customer(id, property) = value
  • 10. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Index for an Customer Document customer(id, property) = value customer = { '386': { firstName: 'John', lastName: 'Briggs', address: '123 Acacia Drive', // …etc }, // ….etc }
  • 11. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Index for an Customer Document customer(id, property) = value customer = { '386': { firstName: 'John', lastName: 'Briggs', address: '123 Acacia Drive', // …etc }, // ….etc }
  • 12. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Index for an Customer Document customer(386,"firstName")="John" customer(386,"lastName")="Briggs" customer(386,"address")="123 Acacia Drive" Customer document represented in Global Storage
  • 13. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Index for an Customer Document customer(386,"firstName")="John" customer(386,"lastName")="Briggs" customer(386,"address")="123 Acacia Drive" var index = new this.documentStore.DocumentNode('myIndex'); var customer = new this.documentStore.DocumentNode('customer'); index.forEachChild({prefix: 'Br}', function(nodeName, childNode) { childNode.forEachChild(function(id) { // use id to point to main data record var address = customer.$(id).$('address').value; // … etc }); });
  • 14. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Index for an Customer Document customer(386,"firstName")="John" customer(386,"lastName")="Briggs" customer(386,"address")="123 Acacia Drive" var index = new this.documentStore.DocumentNode('myIndex'); var customer = new this.documentStore.DocumentNode('customer'); index.forEachChild({prefix: 'Br}', function(nodeName, childNode) { childNode.forEachChild(function(id) { // use id to point to main data record var address = customer.$(id).$('address').value; // … etc }); });
  • 15. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Index for an Customer Document customer(386,"firstName")="John" customer(386,"lastName")="Briggs" customer(386,"address")="123 Acacia Drive" var index = new this.documentStore.DocumentNode('myIndex'); var customer = new this.documentStore.DocumentNode('customer'); index.forEachChild({prefix: 'Br}', function(nodeName, childNode) { childNode.forEachChild(function(id) { // use id to point to main data record var address = customer.$(id).$('address').value; // … etc }); });
  • 16. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Index for an Customer Document customer(386,"firstName")="John" customer(386,"lastName")="Briggs" customer(386,"address")="123 Acacia Drive" var index = new this.documentStore.DocumentNode('myIndex'); var customer = new this.documentStore.DocumentNode('customer'); index.forEachChild({prefix: 'Br}', function(nodeName, childNode) { childNode.forEachChild(function(id) { // use id to point to main data record var address = customer.$(id).$('address').value; // … etc }); });
  • 17. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Index for an Customer Document customer(386,"firstName")="John" customer(386,"lastName")="Briggs" customer(386,"address")="123 Acacia Drive" var index = new this.documentStore.DocumentNode('myIndex'); var customer = new this.documentStore.DocumentNode('customer'); index.forEachChild({prefix: 'Br}', function(nodeName, childNode) { childNode.forEachChild(function(id) { // use id to point to main data record var address = customer.$(id).$('address').value; // … etc }); });
  • 18. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Index for an Customer Document customer(386,"firstName")="John" customer(386,"lastName")="Briggs" customer(386,"address")="123 Acacia Drive" var index = new this.documentStore.DocumentNode('myIndex'); var customer = new this.documentStore.DocumentNode('customer'); index.forEachChild({prefix: 'Br}', function(nodeName, childNode) { childNode.forEachChild(function(id) { // use id to point to main data record var address = customer.$(id).$('address').value; // … etc }); });
  • 19. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Index for an Customer Document customer(386,"firstName")="John" customer(386,"lastName")="Briggs" customer(386,"address")="123 Acacia Drive" var index = new this.documentStore.DocumentNode('myIndex'); var customer = new this.documentStore.DocumentNode('customer'); index.forEachChild({prefix: 'Br}', function(nodeName, childNode) { childNode.forEachChild(function(id) { // use id to point to main data record var address = customer.$(id).$('address').value; // … etc }); });
  • 20. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Index for an Customer Document customer(386,"firstName")="John" customer(386,"lastName")="Briggs" customer(386,"address")="123 Acacia Drive" var index = new this.documentStore.DocumentNode('myIndex'); var customer = new this.documentStore.DocumentNode('customer'); index.forEachChild({prefix: 'Br}', function(nodeName, childNode) { childNode.forEachChild(function(id) { // use id to point to main data record var address = customer.$(id).$('address').value; // … etc }); });
  • 21. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Iterate Prefixes in Reverse Order?
  • 22. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Iterate Prefixes in Reverse Order var index = new this.documentStore.DocumentNode('myIndex'); var params = {prefix: 'Br', direction: 'reverse'} ; index.forEachChild(params, function(name, childNode) { childNode.forEachChild(function(id) { console.log(id); }); });
  • 23. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Iterate Prefixes in Reverse Order var index = new this.documentStore.DocumentNode('myIndex'); var params = {prefix: 'Br', direction: 'reverse'} ; index.forEachChild(params, function(name, childNode) { childNode.forEachChild(function(id) { console.log(id); }); }); Control object allows prefix to be combined with reverse
  • 24. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Iterate Prefixes in Reverse Order var index = new this.documentStore.DocumentNode('myIndex'); var params = {prefix: 'Br', direction: 'reverse'} ; index.forEachChild(params, function(name, childNode) { childNode.forEachChild(function(id) { console.log(id); }); }); Control object allows prefix to be combined with reverse 23 5321 210 386
  • 25. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Iterate Prefixes in Reverse Order var index = new this.documentStore.DocumentNode('myIndex'); var params = {prefix: 'Br', direction: 'reverse'} ; index.forEachChild(params, function(name, childNode) { childNode.forEachChild(function(id) { console.log(id); }); }); Control object allows prefix to be combined with reverse 23 5321 210 386 Inner loop is in forward direction!
  • 26. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Iterate Prefixes in Reverse Order var index = new this.documentStore.DocumentNode('myIndex'); var params = {prefix: 'Br', direction: 'reverse'} ; index.forEachChild(params, function(name, childNode) { childNode.forEachChild( {direction: 'reverse'} , function(id) { console.log(id); }); }); Use the control object to reverse the inner loop also
  • 27. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Iterate Prefixes in Reverse Order var index = new this.documentStore.DocumentNode('myIndex'); var params = {prefix: 'Br', direction: 'reverse'} ; index.forEachChild(params, function(name, childNode) { childNode.forEachChild( {direction: 'reverse'} , function(id) { console.log(id); }); }); Use the control object to reverse the inner loop also 5321 23 386 210 Now the output is fully reversed
  • 28. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Restricting the Loop to a Range From: substring 1 To: substring 2 eg: from Briggs to Davis
  • 29. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Restricting the Loop to a Range forEachChild({ range: { from: 'Briggs', to: 'Davis' } }, function{..})
  • 30. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Restricting the Loop to a Range More likely restriction: forEachChild({ range: { from: 'Br', to: 'Da' } }, function{..}) from and to define prefixes within which it returns nodes
  • 31. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Restricting the Loop to a Range or: forEachChild({ range: { from: 'B', to: 'D' } }, function{..}) from and to define prefixes within which it returns nodes
  • 32. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Restricting the Loop to a Range var index = new this.documentStore.DocumentNode('myIndex'); var params = { range: { from: 'Br', to: 'Da' } }; index.forEachChild(params, function(name, childNode) { childNode.forEachChild(function(id) { console.log(id); }); });
  • 33. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Restricting the Loop to a Range var index = new this.documentStore.DocumentNode('myIndex'); var params = { range: { from: 'Br', to: 'Da' } }; index.forEachChild(params, function(name, childNode) { childNode.forEachChild(function(id) { console.log(id); }); }); 210 386 23 5321 641 714 13 8142 9112
  • 34. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Iterating a Range in reverse?
  • 35. Copyright © 2016 M/Gateway Developments Ltd myIndex("Andrews",103)="" myIndex("Barton",23)="" myIndex("Briggs",210)="" myIndex("Briggs",386)="" myIndex("Bryant",23)="" myIndex("Bryant",5321)="" myIndex("Davies",641)="" myIndex("Davies",714)="" myIndex("Davis",13)="" myIndex("Davis",8142)="" myIndex("Davis",9112 )="" myIndex("Douglas",651)="" myIndex("Ennis",108)="" myIndex("Ennis",712)="" Iterating a Range in reverse var index = new this.documentStore.DocumentNode('myIndex'); var params = { direction: 'reverse', range: { from: 'Br', to: 'Da' } }; index.forEachChild(params, function(name, childNode) { childNode.forEachChild(function(id) { console.log(id); }); }); Control object allows range to be combined with reverse