Reputation: 4578
I have this Schema:
var ParameterSchema = new Schema({
id: {
type: String,
trim: true,
default: ''
},
value: {
type: String,
trim: true,
default: ''
}
});
And I want to use it as sub-document, in two or more collections which are defined in different files like this:
File 1
var FirstCollectionSchema = new Schema({
name: {
type: String,
trim: true,
default: ''
},
parameters: [ParameterSchema]
});
File 2
var SecondCollectionSchema = new Schema({
description: {
type: String,
trim: true,
default: ''
},
parameters: [ParameterSchema]
});
so, the question is: How can I define ParameterSchema one time only, in another file, and use it from File 1 and from File 2.
Upvotes: 7
Views: 4471
Reputation: 374
Export the parameter sub-doc schema as a module.
// Parameter Model file 'Parameter.js'
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var ParameterSchema = new Schema({
id: {
type: String,
trim: true,
default: ''
},
value: {
type: String,
trim: true,
default: ''
}
});
module.exports = ParameterSchema;
// Not as a mongoose model i.e.
// module.exports = mongoose.model('Parameter', ParameterSchema);
Now require the exported module schema in your parent document.
// Require the model exported in the Parameter.js file
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var Parameter = require('./Parameter');
var FirstCollectionSchema = new Schema({
name: {
type: String,
trim: true,
default: '
},
parameters: [Parameter]
});
module.exports = mongoose.model('FirstCollection', FirstCollectionSchema);
Now you save the collection and sub document.
var FirstCollection = require('./FirstCollection')
var feat = new FirstCollection({
name: 'foo',
parameters: [{
id: 'bar',
value: 'foobar'
}]
});
feat.save(function(err) {
console.log('Feature Saved');
})
Upvotes: 14