orc-denorm
Denormalize Orchestrate items in the background.
Install
To get orc-denorm, you'll need node.js. Once you've got that installed, install orc-denorm like this:
npm install -g orc-denorm
That gives you access to orc-denorm's CLI. To install orc-denorm as a dependency of another project, install like this:
npm install orc-denorm
Usage
To run orc-denorm with just the default settings, do this:
orc-denorm -u YOUR_API_KEY -c COLLECTION
This will examine every item in COLLECTION
for fields named like [collection]_key
, use their value to find the item they refer to, and create a new document in denorm_COLLECTION
where those [collection]_key
fields have been changed to include the whole item they refer to, rather than just its key. So, for example, this document from a like
collection:
{
user_key: '...',
post_key: '...'
}
... will be turned into this:
{
user: {
...
},
post: {
...
}
}
With the same key as the original, but in the denorm_like
collection.
Customization
To customize how orc-denorm handles documents, you can write your own script:
var orc_denorm = ;// the custom denormalization function// must return a promiseorc_denorm {// db is an authenticated orchestrate.js client// path == { collection: '...', key: '...', ref: '...'}// item == { /* the item's value */ }// let's run the default denormalization function firstreturn this;};// run orc-denorm's CLIorc_denorm;// or just start the process with orc_denorm.start({ collection: '...', api_key: '...' })
Error Handling
orc-denorm does its best to continue running no matter what error messages it receives from Orchestrate. For example:
- Related object is missing? That field in the denormalized item is now null, while scanning continues.
- Related object yields some other wacky error? Skip denormalizing that object, while scanning continues.
- Retrieving collection listing yields some 4xx or 5xx error? Try again!
To make sure orc-denorm really never dies, use forever:
forever orc-denorm -u YOUR_API_KEY -c COLLECTION
This will restart orc-denorm if it ever halts unexpectedly.
Tests
npm test
License
ASLv2, yo.