2016-06-22 27 views
2

ネストされた配列にオブジェクトを追加するにはどうすればいいですか?PartnerSchemaNode.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"

答えて

3

:私は、エラーが発生しています。

あなたはPartnerモデルにProduct _id refの保存を許可するようにコードを再構築する必要があります名前について

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); 
      } 
     ); 
    }); 
}); 
+0

何?このコードはidを持つ商品を追加するだけです。製品の名前欄に 'req.body.dataProduct.name'も追加する必要があります。 – DiPix

+0

人口の追加時にMongooseが自動的に追加するので、名前を追加する必要はありません。あなたはモンゴセ人口の概念を理解する必要があります、私はあなたがより多くの[ここ](http://mongoosejs.com/docs/populate.html) – chridam

+0

'{" _id ":ObjectId(" 576a4ed4318781680dc3e57f ")、"名前 " : "examplePartner"、 "products":[ObjectId( "576a5e54e8b3585818502fc4")]、 "__v":0} ' 製品で見ることができるように、配列はIDのみです。名前なし... – DiPix

関連する問題