docs/orm.md
Add ORM capabilities to RxDB collections and documents with custom static methods, instance methods, and attachment methods for structured data access.
Like mongoose, RxDB has ORM capabilities which can be used to add specific behavior to documents and collections.
Statics are defined collection-wide and can be called on the collection.
To add static functions, pass a statics object when you create your collection. The object contains functions, mapped to their function names.
const heroes = await myDatabase.addCollections({
heroes: {
schema: mySchema,
statics: {
scream: function(){
return 'AAAH!!';
}
}
}
});
console.log(heroes.scream());
// 'AAAH!!'
You can also use the this keyword which resolves to the collection:
const heroes = await myDatabase.addCollections({
heroes: {
schema: mySchema,
statics: {
whoAmI: function(){
return this.name;
}
}
}
});
console.log(heroes.whoAmI());
// 'heroes'
Instance methods are defined collection-wide. They can be called on the RxDocuments of the collection.
const heroes = await myDatabase.addCollections({
heroes: {
schema: mySchema,
methods: {
scream: function(){
return 'AAAH!!';
}
}
}
});
const doc = await heroes.findOne().exec();
console.log(doc.scream());
// 'AAAH!!'
Here you can also use the this keyword:
const heroes = await myDatabase.addCollections({
heroes: {
schema: mySchema,
methods: {
whoAmI: function(){
return 'I am ' + this.name + '!!';
}
}
}
});
await heroes.insert({
name: 'Skeletor'
});
const doc = await heroes.findOne().exec();
console.log(doc.whoAmI());
// 'I am Skeletor!!'
Attachment methods are defined collection-wide. They can be called on the RxAttachments of the RxDocuments of the collection.
const heroes = await myDatabase.addCollections({
heroes: {
schema: mySchema,
attachments: {
scream: function(){
return 'AAAH!!';
}
}
}
});
const doc = await heroes.findOne().exec();
const attachment = await doc.putAttachment({
id: 'cat.txt',
data: 'meow I am a kitty',
type: 'text/plain'
});
console.log(attachment.scream());
// 'AAAH!!'