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

时间:2016-06-22 08:59:22

标签: javascript arrays node.js mongodb mongoose

如何在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我无法在Partner Schema中将Product添加到Array。我有一个错误:CastError: Cast to undefinded failed for value "[object Object]" at path "products"

1 个答案:

答案 0 :(得分:3)

由于Partner模型中的产品字段是一个将_id引用保存到Product模型的数组,因此您应该将_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);
            }
        );
    });
});