gpt4 book ai didi

javascript - 如何使用 Node.js 和 Mongoose 将对象添加到嵌套数组

转载 作者:可可西里 更新时间:2023-11-01 10:03:04 24 4
gpt4 key购买 nike

如何将对象添加到 PartnerSchema 中的嵌套数组?

我把文件分开,因为以后嵌套数组会更多

这是我的模式:

var productSchema = new mongoose.Schema({
name: String
});

var partnerSchema = new mongoose.Schema({
name: String,
products: [
{
type: mongoose.Schema.Types.ObjectId,
ref: 'Product'
}]
});

module.exports = {
Partner: mongoose.model('Partner', partnerSchema),
Product: mongoose.model('Product', productSchema)
}

这是我的后端:

var campSchema = require('../model/camp-schema');

router.post('/addPartner', function (req, res) {
new campSchema.Partner({ name : req.body.name }).save(function (err, response) {
if (err) console.log(err);
res.json(response);
});
});

router.post('/addProduct', function (req, res) {
campSchema.Partner.findByIdAndUpdate({ _id: req.body.partnerId },
{
$push: {
"products": {
name: req.body.dataProduct.name
}
}
}, { safe: true }, function (err, response) {
if (err) throw err;
res.json(response);
});
});

我可以使用 /addPartner 添加合作伙伴,它工作正常。

问题出在第二个函数 /addProduct 我无法将 Product 添加到 Partner Schema 中的 Array。我有一个错误:CastError: Cast to undefinded failed for value "[object Object]"at path "products"

最佳答案

由于 Partner 模型中的产品字段是一个数组,其中包含 _idProduct 模型的引用,因此您应该推送一个 _id 到数组,而不是对象,因此 Mongoose 会报错。

您应该重构您的代码以允许将 Product _id ref 保存到 Partner 模型:

router.post('/addProduct', function (req, res) {
var product = new campSchema.Product(req.body.dataProduct);

product.save(function (err) {
if (err) return throw err;
campSchema.Partner.findByIdAndUpdate(
req.body.partnerId,
{ "$push": { "products": product._id } },
{ "new": true },
function (err, partner) {
if (err) throw err;
res.json(partner);
}
);
});
});

关于javascript - 如何使用 Node.js 和 Mongoose 将对象添加到嵌套数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37963226/

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