我有以下架构:
var TagSchema = new Schema({
name: {
type: String,
default: ''
}
});
var SnippetSchema = new Schema({
title: {
type: String,
default: ''
},
tags: [{
type: Schema.ObjectId,
ref: 'Tag'
}]
});
我创建了一个新的Snippet并搜索了一个标记(从请求中获取了tagid),将其添加到标记列表中。
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的值失败" [object Object]"在路径"标签"
我尝试了同样的事情,标签是一个标签数组的单个标签instad - 这完美地工作。
有没有人有想法?
非常感谢!
答案 0 :(得分:1)
我很确定错误是由这一行引起的:
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会尝试将非数组值转换为数组,如果这是在模式中定义的。但是,您仍需要确保正在创建的数组是有效数组。