MongoDB:如何将一个模式用作不同文件中定义的不同集合的子文档

Rag*_*nar 6 mongoose mongodb node.js

我有这个架构:

var ParameterSchema = new Schema({
    id: {
        type: String,
        trim: true,
        default: ''
    },
    value: {
        type: String,
        trim: true,
        default: ''
    }
});
Run Code Online (Sandbox Code Playgroud)

我想将它用作子文档,在两个或多个集合中,这些集合在不同的文件中定义,如下所示:

档案1

var FirstCollectionSchema = new Schema({
    name: {
        type: String,
        trim: true,
        default: ''
    },
    parameters: [ParameterSchema]
});
Run Code Online (Sandbox Code Playgroud)

档案2

var SecondCollectionSchema = new Schema({
    description: {
        type: String,
        trim: true,
        default: ''
    },
    parameters: [ParameterSchema]
});
Run Code Online (Sandbox Code Playgroud)

所以,问题是:如何在另一个文件中定义一次ParameterSchema,并从文件1文件2中使用它.

biz*_*nzz 12

将参数子doc模式导出为模块.

// 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);
Run Code Online (Sandbox Code Playgroud)

现在需要父文档中导出的模块架构.

// 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);
Run Code Online (Sandbox Code Playgroud)

现在保存集合和子文档.

var FirstCollection = require('./FirstCollection')

var feat = new FirstCollection({
  name: 'foo',
  parameters: [{
    id: 'bar',
    value: 'foobar'
  }]
});

feat.save(function(err) {
  console.log('Feature Saved');
})
Run Code Online (Sandbox Code Playgroud)