mongoose-transfer

1.3.0 • Public • Published

mongoose-transfer

Build Status npm npm

Mongoose plugin to transfer references to a new document by calling [document].transfer(newID)

Installation

npm install --save mongoose-transfer

Usage

const mongoose = require('mongoose')
const Schema = mongoose.Schema
const mongooseTransfer = require('mongoose-transfer')
 
let YourSchema = new Schema({
  title: String,
  description: String,
  author: String,
})
 
YourSchema.plugin(mongooseTransfer, {
  relations: [{ model: 'SomeOtherModel', key: 'author', condition: { company: '...' } }],
  debug: true, // Default: false -> If true operations are logged out in your console
})
 
let Model = mongoose.model('YourSchema', YourSchema)

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.transfer(NEWID, OPTIONS)

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.transfer('NEWID', {
  condition: { company: '...' },
})

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" } }
}
{
  condition: function(doc, model) {
    console.log(model) // -> e.g. "User"
    return doc.name !== '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 } }]
  condition: function(doc, model) {
    return doc.company === '...'
  }
}

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

Package Sidebar

Install

npm i mongoose-transfer

Weekly Downloads

5

Version

1.3.0

License

MIT

Unpacked Size

32.5 kB

Total Files

11

Last publish

Collaborators

  • crsten