保存在mongoose参考列表
我有以下模式:
var TagSchema = new Schema({ name: { type: String, default: '' } }); var SnippetSchema = new Schema({ title: { type: String, default: '' }, tags: [{ type: Schema.ObjectId, ref: 'Tag' }] });
我创build了一个新的Snippet并search一个标签(从请求中获取标签),将其添加到标签列表中。
var snippet = new Snippet(req.body); Tag.findById(req.body.tagid).exec(function(err, tag) { snippet.tags.push(tag); snippet.save(function(err) { if (err) { } else { res.json(snippet); } }); });
但我总是得到以下错误: 投射到ObjectId失败的价值“[对象对象]”path“标签”
我试着把标签作为标签数组的一个标签instad,同样的事情 – 而且工作完美。
有没有人有一个想法?
非常感谢!
我很确定这个错误是由这一行引起的:
var snippet = new Snippet(req.body);
我的猜测是, req.body.tags
是一个对象,而不是一个对象数组。 当您随后保存片段时,将引发错误。
作为一个快速修复,你可以用一个数组包装:
var tags = req.body.tags; if (tags && tags.constructor.name !== 'Array') { req.body.tags = [ tags ]; } var snippet = new Snippet(req.body);
编辑 :@ damphat正确地评论说,Mongoose将尝试和非数组的值转换为数组,如果这是模式中定义的。 但是,您仍然需要确保正在创build的数组是有效的。