在mongoose中保存引用列表

时间:2014-01-03 22:47:09

标签: node.js mongoose

我有以下架构:

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 - 这完美地工作。

有没有人有想法?

非常感谢!

1 个答案:

答案 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会尝试将非数组值转换为数组,如果这是在模式中定义的。但是,您仍需要确保正在创建的数组是有效数组。