https://github.com/doasync/mongoose-extend-schema
Extends mongoose schema
https://github.com/doasync/mongoose-extend-schema
Last synced: 12 months ago
JSON representation
Extends mongoose schema
- Host: GitHub
- URL: https://github.com/doasync/mongoose-extend-schema
- Owner: doasync
- License: mit
- Created: 2017-07-28T17:05:28.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2023-01-31T21:55:14.000Z (about 3 years ago)
- Last Synced: 2025-03-20T20:37:44.370Z (12 months ago)
- Language: JavaScript
- Size: 31.3 KB
- Stars: 14
- Watchers: 1
- Forks: 3
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Mongoose schema inheritance
This npm module extends mongoose schema (returning new one)
NOT ~~mongoose-schema-extend~~ but **mongoose-extend-schema**
### Installation
```sh
$ npm i --save mongoose-extend-schema
```
### Usage
```javascript
const extendSchema = require('mongoose-extend-schema');
const UserSchema = new mongoose.Schema({
firstname: {type: String},
lastname: {type: String}
});
const ClientSchema = extendSchema(UserSchema, {
phone: {type: String, required: true}
});
```
### Example
```javascript
const mongoose = require('mongoose');
const extendSchema = require('mongoose-extend-schema');
const UserSchema = new mongoose.Schema({
email: {type: String, unique: true, required: true},
passwordHash: {type: String, required: true},
firstname: {type: String},
lastname: {type: String},
phone: {type: String}
});
// Extend UserSchema
const AdminUserSchema = extendSchema(UserSchema, {
firstname: {type: String, required: true},
lastname: {type: String, required: true},
phone: {type: String, required: true}
});
const User = mongoose.model('users', UserSchema);
const AdminUser = mongoose.model('admins', AdminUserSchema);
const john = new User({
email: 'user@site.com',
passwordHash: 'bla-bla-bla',
firstname: 'John'
});
john.save();
const admin = new AdminUser({
email: 'admin@site.com',
passwordHash: 'bla-bla-bla',
firstname: 'Henry',
lastname: 'Hardcore',
// phone: '+555-5555-55'
});
admin.save();
// Oops! Error 'phone' is required
```
### Source code
```javascript
const mongoose = require('mongoose');
function extendSchema (Schema, definition, options) {
return new mongoose.Schema(
Object.assign({}, Schema.obj, definition),
options
);
}
module.exports = extendSchema;
```
Author
----
@doasync