Giải pháp mà tôi có thể nghĩ đến là cập nhật từng tài liệu lồng nhau một.
Giả sử chúng ta đã nắm được các cụm từ bị cấm, đó là một chuỗi các chuỗi:
var bannedPhrases = ["censorship", "evil"]; // and more ...
Sau đó, chúng tôi thực hiện truy vấn để tìm tất cả UserComments
có comments
có chứa bất kỳ bannedPhrases
.
UserComments.find({"comments.comment": {$in: bannedPhrases }});
Bằng cách sử dụng các hứa hẹn, chúng ta có thể thực hiện cập nhật không đồng bộ cùng nhau:
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);
});
Nếu bạn sử dụng Bluebird JS là thư viện lời hứa của Mongoose, mã có thể được đơn giản hóa:
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
});