2015-06-27 110 views
0

我想嵌入一个文档,所以我猜一个子文档,到Mongoose架构。我一直遵循Mongoose documentation提出的这种模式。我的模式看起来像这样。Mongoose Schema嵌入文档默认

var CategoriesSchema = new Schema({ 
    name: { type: String, required: true, default: 'default' } 
}); 

var PostSchmea = new Schema({ 
    title: { type: String, required: true, default: 'default title' }, 
    writtenBy: { type: ObjectId, required: true, default: '55878003ebf4b06110ef2ff8' }, 
    publishedOn: { type: Date, default: Date.now }, 
    updatedOn: Date, 
    published: { type: Boolean, required: true, default: false }, 
    content: { type: String, required: true, default: 'empty' }, 
    category: { type: [CategoriesSchema] }, 
    tags: [String], 
    images: [String] 
}); 

正如您所看到的,我已将CategoriesSchema嵌入到PostSchema中。我的问题是如何为PostSchema中的类别键设置默认值。我尝试以下,并得到了错误“类型错误:无法读取属性未定义‘$ __’”:

var PostSchmea = new Schema({ 
    title: { type: String, required: true, default: 'default title' }, 
    writtenBy: { type: ObjectId, required: true, default: '55878003ebf4b06110ef2ff8' }, 
    publishedOn: { type: Date, default: Date.now }, 
    updatedOn: Date, 
    published: { type: Boolean, required: true, default: false }, 
    content: { type: String, required: true, default: 'empty' }, 
    category: { type: [CategoriesSchema], default: [CategoriesSchema] }, 
    tags: [String], 
    images: [String] 
}); 

而且我也试过以下,并得到了错误“语法错误:意外令牌”:

var PostSchmea = new Schema({ 
    title: { type: String, required: true, default: 'default title' }, 
    writtenBy: { type: ObjectId, required: true, default: '55878003ebf4b06110ef2ff8' }, 
    publishedOn: { type: Date, default: Date.now }, 
    updatedOn: Date, 
    published: { type: Boolean, required: true, default: false }, 
    content: { type: String, required: true, default: 'empty' }, 
    category: { type: [CategoriesSchema], default: new CategoriesSchema(name: "default") }, 
    tags: [String], 
    images: [String] 
}); 

任何建议或文件将不胜感激。

谢谢,

回答

0

我相信问题可能在于您的依赖声明。我用你的代码来声明mongoose模式,并且它工作正常,但是你没有包含你的依赖关系,或者你的创建方法,所以让我告诉你我是如何创建记录的,并且我希望这会有所帮助。您也可以参考这个堆栈溢出的答案为的ObjectId的依赖性声明:How to set ObjectId as a data type in mongoose

这里是我的代码:

//contents of stackoverflow.js 
var mongoose = require('mongoose'), 
Schema = mongoose.Schema; 
var ObjectId = Schema.ObjectId; 

var CategoriesSchema = new Schema({ 
    name: { type: String, required: true, default: 'default' } 
}); 


var PostSchmea = new Schema({ 
    title: { type: String, required: true, default: 'default title' }, 
    writtenBy: { type: ObjectId, required: true, default:  '55878003ebf4b06110ef2ff8' }, 
    publishedOn: { type: Date, default: Date.now }, 
    updatedOn: Date, 
    published: { type: Boolean, required: true, default: false }, 
    content: { type: String, required: true, default: 'empty' }, 
    category: { type: [CategoriesSchema], default: [CategoriesSchema] }, 
    tags: [String], 
    images: [String] 
}); 

mongoose.model('Post', PostSchmea); 
mongoose.model('Categories',CategoriesSchema); 

然后我宣布我server.js文件中的架构和模式来运行代码和创建一个记录:

//contents of my server.js file (or wherever you put your controllers)  
var stack = require('./app/models/stackoverflow'), 
post = mongoose.model('Post'); 

var v = new post({ 
    //Define your values here 
}); 

v.save(function(err,docs) { 
if (err) { 
    console.log(err) 

} else { 
    console.log(docs) 
} 
}); 

这成功创建了所有定义的默认值的记录。希望有所帮助。

+0

感谢您的回答!我要测试一下,如果有效,我会告诉你。再次感谢! –

+2

这不适用于猫鼬4+。 存在嵌入文档无法识别父文件的问题 – lobengula3rd