sql >> Databasteknik >  >> NoSQL >> MongoDB

Uppdatera flera underdokument via Mongoose?

Lösningen jag kan tänka mig är att uppdatera det kapslade dokumentet en efter en.

Anta att vi har fått tag i de förbjudna fraserna, som är en rad strängar:

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

Sedan utför vi en fråga för att hitta alla UserComments som har comments som innehåller någon av bannedPhrases .

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

Genom att använda löften kan vi utföra uppdatering asynkront tillsammans:

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

Om du använder Bluebird JS är Mongooses löftesbibliotek, kan koden förenklas:

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. Hitta alla dokument under de senaste n dagarna

  2. Hur den primära servern nere kommer att hanteras automatiskt i mongodb-replikering

  3. Hur gör man paginering med hjälp av intervallfrågor i MongoDB?

  4. Är det möjligt att få en skiva av en skiva i Mongo?