ネストされた配列にオブジェクトを追加するにはどうすればいいですか?PartnerSchema
?Node.jsとMongooseを使ってネストされた配列にオブジェクトを追加する方法
ドキュメントを別々にすると、将来的には入れ子配列の数が増えるためです。
これは私のスキーマです:
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
を使用してパートナーを追加することができますし、それが正常に動作します。
問題は2番目の機能にあります/addProduct
パートナースキーマの配列に商品を追加できません。 Partner
モデルにおける製品のフィールドは、あなたが配列ではなく、マングースがエラーで文句を言うことを目的に_id
を押すことになっているProduct
モデルに_id
REFを保持する配列であるのでCastError: Cast to undefinded failed for value "[object Object]" at path "products"
何?このコードはidを持つ商品を追加するだけです。製品の名前欄に 'req.body.dataProduct.name'も追加する必要があります。 – DiPix
人口の追加時にMongooseが自動的に追加するので、名前を追加する必要はありません。あなたはモンゴセ人口の概念を理解する必要があります、私はあなたがより多くの[ここ](http://mongoosejs.com/docs/populate.html) – chridam
'{" _id ":ObjectId(" 576a4ed4318781680dc3e57f ")、"名前 " : "examplePartner"、 "products":[ObjectId( "576a5e54e8b3585818502fc4")]、 "__v":0} ' 製品で見ることができるように、配列はIDのみです。名前なし... – DiPix