当从Mongoose 3.x升级到Mongoose 4.x时,如何在模式中使用模式?

我有2个文件:

关键特点:

mongoose = require('mongoose'); Schema = mongoose.Schema; DescriptionSchema = require('./description'); KeyFeatureSchema = new Schema({ descriptions: [DescriptionSchema], title: String, key: String, display: String, feature: { type: Schema.Types.ObjectId, ref: 'Module' } }); module.exports = KeyFeatureSchema; 

描述:

 mongoose = require('mongoose'); DescriptionSchema = new mongoose.Schema(); DescriptionSchema.add({ display: String, subdescriptions: [String] }); module.exports = DescriptionSchema; 

我如何重写这与Mongoose 4 .add语法兼容?

  • 无法用Node / Express / Mongodb读取null的属性'find'
  • 用mongoose进行build筑投票的“正确方法”?
  • Mongoose无法连接到本地主机:MongoError:无法连接到服务器
  • mongoose:如何临时存储游标?
  • mongoose(mongo),复制文件
  • 无法从Mongoose语句中推入数组
  • 如何使用mongoose更新节点中的内部文件
  • findAndModify在数组开始处插入MongoDB元素
  • 我不确定我是否理解你的问题,但这是我得到的。

    根据4.5.2的mongoose .add文档,添加语法仍然相同。 所以我用你的模式做了一个简单的testing.js文件。 我用一个对象在说明数组中创build了一个keyFeature对象并保存它。 之后,我使用mongo控制台连接到mongod并查询keyfeatures集合。 该对象已正确插入到数据库中。

    这是我的代码

     var mongoose = require('mongoose'); var DescriptionSchema = require('./description.js'); var KeyFeatureSchema = require('./keyFeature.js'); mongoose.connect('mongodb://localhost/mongoose-testing', function(err) { if(err){ console.log('Could not connect to mongoose', err); }else{ console.log('Successfully connected to mongoose'); mongoose.model('Description', DescriptionSchema); mongoose.model('Keyfeature', KeyFeatureSchema); var Keyfeature = mongoose.model('Keyfeature'); new Keyfeature({ descriptions: [{ display: 'This is the display content from descriptions', subdescriptions: ['Subdescription 1'] }], title: 'tittle', key: 'key', display: 'display' }).save(function(err){ if(err){ console.log('Error when saving', err); }else{ console.log('Saved'); } }); } }); 

    mongoose@4.5.2testing