如何在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"
答案 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);
}
);
});
});