【发布时间】:2015-05-29 19:11:39
【问题描述】:
使用猫鼬填充: http://mongoosejs.com/docs/populate.html
当我第一次创建文档时,猫鼬迫使我为填充声明一个参考值,但在我的情况下,我还没有参考信息。当我尝试在提供一个空字符串的同时创建一个新文档时,我得到了我的开发人员字段:
{"message":"Cast to ObjectId failed for value \"\" at path \"developer\"","name":"CastError","type":"ObjectId","value":"","path":"developer"}
我通过猫鼬保存的对象:
var Project = {
name: 'Coolproject',
status: 'pending',
developer: '',
type: 'basic',
};
Project.create(req.body, function(err, project) {
if(err) { return handleError(res, err); }
return
});
我的模特:
var ProjectSchema = new Schema({
name: String,
status: {type:String, default:'pending'},
developer:{type: Schema.Types.ObjectId, ref: 'User'},
type:String
});
基本上我需要稍后设置它,但它不像这样是可能的。目前我的解决方法是在稍后再填充一个虚拟用户,但这不太理想。
想法?
更新
意识到如果我提供一个对象 id 值 (55132a418b3cde5546b01b37),它可以让我保存文档。很奇怪。猜猜它只是认为它可以找到文档继续前进。想知道为什么对于空白值不会发生这种情况。
【问题讨论】:
-
我不明白你的意思。是不是让您在不为开发人员定义用户的情况下创建文档?还是不允许您在没有 User 模型的情况下定义架构。人口如何与此联系在一起?问题看起来很X/Y ish。
-
啊,是的,非常正确。更新它希望更清楚一点。我希望以后能够保存参考,而不是在我最初创建父文档时。
-
创建新文档时是否发生此错误?您说保存,但如果您正在保存,则表明您至少能够在某个时候创建文档。能否包含导致此错误的代码?
-
为了清晰起见,我添加了我的模型。是的,这是关于新文档的创建,它不允许我在不提供价值的情况下创建它。当我为文档提供 id 时效果很好,但当我把它留空时就不行了。
-
您可以添加您尝试创建/保存文档并收到错误的部分吗?你是在说
var p = new Project(); p.save();之类的失败吗?