मैं जिस समाधान के बारे में सोच सकता हूं वह है नेस्टेड दस्तावेज़ को एक-एक करके अपडेट करना।
मान लें कि हमने प्रतिबंधित वाक्यांशों को पकड़ लिया है, जो स्ट्रिंग्स की एक सरणी है:
var bannedPhrases = ["censorship", "evil"]; // and more ...
फिर हम सभी UserComments
. को खोजने के लिए एक क्वेरी करते हैं जिसमें comments
है जिसमें कोई भी bannedPhrases
. हो ।
UserComments.find({"comments.comment": {$in: bannedPhrases }});
वादों का उपयोग करके, हम एक साथ अतुल्यकालिक रूप से अपडेट कर सकते हैं:
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);
});
यदि आप ब्लूबर्ड JS का उपयोग करते हैं नेवला का वादा पुस्तकालय है, कोड को सरल बनाया जा सकता है:
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
});