2016-11-07 1 views
0

Ich habe eine Frage beim Versuch, ein Unterdokument von MongoDB zu entfernen.lodash entfernt alle Objekte aus dem Array. Nicht nach meiner Spezifikation

Hier ist meine Datenstruktur:

"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" 
    } 
] 
} 

Ich versuchte lodash zu verwenden, um einen Teilnehmer zu löschen, aber lodash alle meine Teilnehmer entfernen. Können Sie mir helfen, dieses Problem zu lösen?

ich den gesamten Code auf Server-Seite aktualisiert, wo Problem hat

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)); 

In Client-Seite ich den gleichen Code verwenden, und es arbeitet

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

Antwort

0

Verwendung Mongo $ Pull:

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

Vielen Dank dafür, ich habe mein Problem gelöst, aber ich verstehe immer noch nicht, warum lodash in meiner Situation nicht funktioniert. –

0

diesen

Sie
MODEL.find(YOUR QUERY).lean().exec(function(err, data){ 
// MODIFY DATA NOW AND SAVE IT 
}) 

DUPLICATE QUESTION


OR

Mungo Models erben von Dokumenten, die eine toObject() Methode haben. Ich glaube, was Sie suchen, sollte das Ergebnis von doc.toObject() sein.

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

, die nicht in meiner Situation arbeiten :( –

0

Nach dem lodash document, entfernt es die angepassten Elemente aus dem Array und gibt ein Array der entfernten Elemente, so dass Sie es nicht zurück zu event.participants zuweisen müssen, aber wenn Sie müssen nach "nicht gleich" suchen, um das gewünschte Array zu erhalten. Hier ist der überarbeitete Code:

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

Hier wird der Ausgang, wenn 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' 
}] 
Verwandte Themen