mongoose-transfer
Mongoose plugin to transfer references to a new document by calling [document].transfer(newID)
Installation
npm install --save mongoose-transfer
Usage
const mongoose = const Schema = mongooseSchemaconst mongooseTransfer = let YourSchema = title: String description: String author: String YourSchema let Model = mongoose
After setting up all relations, you can call .transfer(NEWID, OPTIONS)
on your documents which will transfer all related documents to a new entity.
document
Methods
transfer
This plugin adds a method .transfer
to the schema. Call .transfer
to run a reference transfer
This function takes 2 parameters:
Parameter no. | Type | Description |
---|---|---|
1 | ObjectId | ObjectId which matching documents should be transfered to |
2 | Object | Options (see info below) |
Example
user
Options
condition
Define under which conditions transfer can take place. Accepts an object (mongoose query) or a function executed on each document
condition: "name": $ne: "Mark"
{ console // -> e.g. "User" return docname !== 'Mark' }
relations
Define all relations this model has to other models.
relations is an Array
and takes Objects
like this:
Prop | Type | Description |
---|---|---|
model |
String | Name of the registered mongoose model |
condition |
See condition above | Overrides the condition on document level |
key |
String/Object/Array | Define which props that contain references. See relations.key below |
Examples
model: 'SomeModel' key: 'reference' condition: company: '...'
model: 'SomeModel' key: 'something.nested' key: 'reference' options: remove: true { return doccompany === '...' }
relations.key
Define where the reference is located inside the document. Allows dotnotation ("some.deep.key").
relations.key
can be an Array
for multiple references inside one document or String/Object
for single references inside one document.
Key can be defined in the following ways:
Type | Example | Description |
---|---|---|
String | some.deep.key |
Simpel string selector (dotnotation) |
Object | { key: "some.deep.key", options: {...} } |
Defining it as objects allow for options |
Key options
Keys allow the following options:
Prop | Type | Description |
---|---|---|
remove | Boolean |
Set to true if you want to remove the relation instead of transfering |
model: 'SomeModel' key: 'something.nested' key: 'reference' options: remove: true
debug
You can enable logging of all operations by setting debug
to true
License
The MIT License Copyright (c) Carsten Jacobsen