gpt4 book ai didi

node.js - 在 mongoose 中保存引用列表

转载 作者:太空宇宙 更新时间:2023-11-04 01:08:11 24 4
gpt4 key购买 nike

我有以下架构:

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

var SnippetSchema = new Schema({
title: {
type: String,
default: ''
},

tags: [{
type: Schema.ObjectId,
ref: 'Tag'
}]
});

我创建一个新的代码段并搜索一个标签(从请求中获取 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);
}
});
});

但我总是收到以下错误:路径“tags”处的值“[object Object]”转换为 ObjectId 失败

我尝试了同样的方法,将标签作为单个标签而不是标签数组 - 并且效果非常好。

有人有想法吗?

非常感谢!

最佳答案

我很确定错误是由这一行引起的:

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 将尝试将非数组值转换为数组(如果架构中定义了该值)。但是,您仍然需要确保正在创建的数组是有效的。

关于node.js - 在 mongoose 中保存引用列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20914106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com