2017-03-06 66 views
1

我如何才能检索客户端数组插入的对象,我插入,然后在回调我有所有的客户端,我只想插入。猫鼬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