2016-11-07 2 views
0

MongoDBからサブ文書を削除しようとしたときに質問があります。ここでアレイからすべてのオブジェクトを削除します。私の仕様に従っていない

は私のデータ構造である:

"event" : { 
    "_id": "581fec8011acfb28f6bb0b96", 
    "participants": [ 
    { 
    "_id": "582041475aa37c0e27fde28b", 
    "regDate": "2016-11-07T08:54:31.155Z", 
    "group": "board member", 
    "lastName": "1", 
    "firstName": "test", 
    "eventCode": "07e05d" 
    }, 
    { 
    "_id": "5820414b5aa37c0e27fde28c", 
    "regDate": "2016-11-07T08:54:35.462Z", 
    "group": "participant", 
    "lastName": "2", 
    "firstName": "test", 
    "eventCode": "f1685a" 
    }, 
    { 
    "_id": "5820414e5aa37c0e27fde28d", 
    "regDate": "2016-11-07T08:54:38.441Z", 
    "group": "participant", 
    "lastName": "3", 
    "firstName": "test", 
    "eventCode": "a71ec5" 
    } 
] 
} 

私は一人の参加者を削除するためにlodashを使用しようとしましたが、私の参加者のすべてを削除しlodash。この問題を解決するのに手伝ってもらえますか?

私は問題クライアント側で

var alias = req.params.alias; 
var pid = req.params.pid; 

    var findAndRemoveParticipant = new Promise ((resolve, reject) => { 
     Event.findOne({ 
      "alias":alias 
     },'participants') 
     .exec((err, event) => { 
      if(err) reject(err) 
      else { 
       _.remove(event.participants, {_id: pid}); 
       event.save((err, saved) => { 
        err ? reject(err) : resolve(saved) 
       }) 
      }  
     }) 
    }); 

    findAndRemoveParticipant 
     .then(saved => { 
      res.status(200).json('Participant removed successfully'); 
     }) 
     .catch(err => res.status(400).json(err)); 

私は同じコードを使用し、それが

$http.delete(_deleteParApi) 
     .success(msg => { 
      $scope.parRemoved = msg; 
      _.remove($scope.participants,{_id: pid}) 
     }) 
     .catch(err => { 
      console.log(err); 
     }) 

答えて

0

使用のmongo $プル:

Event.update(
    {"alias":alias}, 
    { $pull: { 'participants': { _id: pid } } } 
); 
+0

ありがとう、私は私の問題を解決した。しかし、私はまだロダシュが私の状況で動作しない理由を理解していない。 –

0

を働くが、この

を行いました、サーバー側のコード全体を更新
MODEL.find(YOUR QUERY).lean().exec(function(err, data){ 
// MODIFY DATA NOW AND SAVE IT 
}) 

DUPLICATE QUESTION


OR

マングースモデルはtoObject()メソッドを持っている文書、継承します。あなたが探しているのは、doc.toObject()の結果であるはずです。あなたはevent.participantsではなく場合は戻って、それを割り当てる必要はありませんので、

take a look

var pid = req.params.pid;/ 
event.toObject() 
event.participants = _.remove(event.participants,{_id: pid}) 
console.log(event.participants); 
// [] 
event.save((err,saved) => { 
    err ? reject(err) : resolve(saved) 
} 
+0

が私の状況では動作しません:( –

0

lodash documentによると、それは、配列からマッチした項目を削除し、削除要素の配列を返します。あなたは、あなたが望む返された配列を得るために '等しくない'のチェックをする必要があります。ここでは改訂コードです:ここでは

var pid = req.params.pid; 
event.participants = _.remove(event.participants,function(o) { 
    return o._id !== pid; 
}); 
console.log(event.participants); 

が出力される場合、PID = '582041475aa37c0e27fde28b':

[{ 
    _id: '5820414b5aa37c0e27fde28c', 
    regDate: '2016-11-07T08:54:35.462Z', 
    group: 'participant', 
    lastName: '2', 
    firstName: 'test', 
    eventCode: 'f1685a' 
}, { 
    _id: '5820414e5aa37c0e27fde28d', 
    regDate: '2016-11-07T08:54:38.441Z', 
    group: 'participant', 
    lastName: '3', 
    firstName: 'test', 
    eventCode: 'a71ec5' 
}] 
関連する問題