2017-03-06 11 views
1

クライアントの配列に挿入されたオブジェクトのみを取得し、挿入してからコールバックするにはすべてのクライアントがあり、挿入したいだけです。mongoose retriveのみがプッシュで挿入されます

User.findOneAndUpdate(
     {_id: req.body.id }, 
     { $push: { clients: { 

      name: req.body.name, 
      tel: req.body.tel, 
      itens: req.body.itens 

     } } }, {safe: true}, 

     function(err, model) { 

      if(err){ 

      console.log(err); 

      } 
      if(!model){ 

      console.log('Not Found') 

      } 
      var itens= model.itens; 
      //print all clients i wanna to print only the inserted 
      console.log(itens); 
     } 

    ); 
+0

私はあなたのユースケースを理解しようとしています。なぜあなたはコールバックに挿入された項目が必要ですか?あなたが今挿入したすべての入力項目( 'req.body.itens')はそうではありませんか?その原子的な更新ので、すべてまたはなし。 – Veeram

+0

はい、私はモデルを印刷すると、彼は私にすべてのクライアントを与えて、最後に挿入したいだけです – John

答えて

2

findOneAndUpdateを使用するのではなく、私が扱う方法です。私はfindOneを使用してオブジェクトを追加し、配列にプッシュして保存します。

User.findOne({_id: req.body.id }, function(err, model) { 
     if(err){ 
      console.log(err); 
     } 
     if(!model){ 
      console.log('Not Found'); 
     } 

     var itemToPush = { 
      _id: mongoose.Types.ObjectId(), 
      name: req.body.name, 
      tel: req.body.tel, 
      itens: req.body.itens 
     }; 

     model.clients.push(itemtToPush); 
     model.save(function(err,model){ 
      console.log(itemToPush._id); 
      console.log(itemToPush); 
     }); 

    } 

); 

IDを探しているかどうかはわかりませんが、プッシュしたいオブジェクトが必要です。繰り返しますが、あなたが探している解決策ではないかもしれません。

+0

私も_idが必要です – John

+0

また、_id:mongoose.Types.ObjectId()をitemToPushに追加することもできます。あなたはすでにIDを取得しています。答えを更新しました。 – hafridi

+0

私はそれを試してみよう、ありがとう – John

関連する問題