例のスキームの説明を使用します。
Comment.add({
title : { type: String, index: true }
, date : Date
, body : String
, comments : [Comment]
});
var BlogPost = new Schema({
title : { type: String, index: true }
, slug : { type: String, lowercase: true, trim: true }
, date : Date
, buf : Buffer
, comments : [Comment]
, creator : Schema.ObjectId
});
コメントにはいくつかのレベルのネストがあります。ネストの任意のレベルで適切なコメントを見つけて、それを使用してアクションを実行する方法 (編集の削除または新しいネストされたコメントの追加) 検索のために再帰を試みましたが、コメントを保存または削除できませんでした
BlogPost.methods.findComment = function (id, callback) {
var curentComment = this.comments;
var findComment = null;
var recursiveFindComment = function(comment){
for(i=0;i<comment.length;i++){
if(findComment){
break;
}
if(comment[i]._id == id){
findComment = comment[i];
break;
}else if(comment[i].comments.length>0){
findComment = recursiveFindComment(comment[i].comments)
}
}
return findComment;
}
if(curentComment.id(id)){
callback(curentComment);
}else{
callback(recursiveFindComment(curentComment, null))
}
}