sql >> Database >  >> NoSQL >> MongoDB

Meerdere subdocumenten bijwerken via Mongoose?

De oplossing die ik kan bedenken is om het geneste document één voor één bij te werken.

Stel dat we de verbannen zinnen in handen hebben, wat een reeks strings is:

var bannedPhrases = ["censorship", "evil"]; // and more ...

Vervolgens voeren we een zoekopdracht uit om alle UserComments . te vinden die comments . heeft die een van de bannedPhrases . bevatten .

UserComments.find({"comments.comment": {$in: bannedPhrases }});

Door beloften te gebruiken, kunnen we de update samen asynchroon uitvoeren:

UserComments.find({"comments.comment": {$in: bannedPhrases }}, {"comments.comment": 1})
  .then(function(results){
    return results.map(function(userComment){

       userComment.comments.forEach(function(commentContainer){
         // Check if this comment contains banned phrases
         if(bannedPhrases.indexOf(commentContainer.comment) >= 0) {
           commentContainer.isHidden = true;
         }
       });

       return userComment.save();
    });
  }).then(function(promises){
     // This step may vary depending on which promise library you are using
     return Promise.all(promises); 
  });

Als u Bluebird JS gebruikt is de beloftebibliotheek van Mongoose, de code kan worden vereenvoudigd:

UserComments.find({"comments.comment": {$in: bannedPhrases}}, {"comments.comment": 1})
    .exec()
    .map(function (userComment) {

        userComment.comments.forEach(function (commentContainer) {
            // Check if this comment contains banned phrases
            if (bannedPhrases.indexOf(commentContainer.comment) >= 0) {
                commentContainer.isHidden = true;
            }
        });

        return userComment.save();
    }).then(function () {
    // Done saving
});


  1. MongoDB:unieke beperking verwijderen

  2. Meteor mongodb $inc met update

  3. Hoe ClassNotFoundException op te lossen:com.mongodb.connection.BufferProvider?

  4. Mongo $addToSet an array