2016-07-31 11 views
1

ネストした配列内の特定の要素をハッシュで選択しようとしています。MongoDB - 流星:配列から要素を更新、追加、削除する

post:{ 
     _id, 
     comments:[{ 
      comment_id:post.comments.length + 1, 
      comment: "hello world", 
      user_id:Meteor.userId()}] 
} 

私の究極の目標は、追加/編集/ comment_idすることにより、ネストされたコメントを削除することができることですが、私は私が最初の場所で必要な要素を選択しようとする問題を抱えています。

答えて

0

あなただけのpostオブジェクトでcommentsを持っている場合にのみ、このようなcomments配列ている必要があります

Posts { 
    _id: String; 
    comments: []; 
} 

をそして、彼のIDでコメントを削除するには、次のコメントを更新するには

Posts.update({_id: postId, "comments.comment_id" : "commentIdToDelete"}, 
{ $pull:{"comments": {"comment_id": "commentIdToDelete"}}}) 

を彼のidによって:

Posts.update({_id: postId, "comments.comment_id" : "commentIdToUpdate"}, 
{ $set:{"comments.$.comment": "A new comment"}}) 
UPDATE我々は(それはまだ行っていない場合)post文書をinitialiazeする必要がcomments配列にコメントを追加するために

Posts.insert({ 
     comments: [] 
    }); 

は、今、私たちはのcomments配列のサイズを取得する必要が

let lengthComments = Posts.findOne({_id: postIdToUpdate}).comments.length; 

をそして最後に、我々はcomments配列にコメントを追加することができます:を更新する

Posts.update({_id: postIdToUpdate}, { 
    $push: { 
     "comments": { 
      "comment_id": lengthComments + 1, 
      "comment": "My comment", 
      "user_id": Meteor.userId(), 
     } 
    } 
}); 
+0

特定の投稿オブジェクトを選択し、その特定のコメント配列を変更するにはどうすればよいですか?私はそれを今セットアップしているので、私はcomment_idを1で開始し、1ポストごとに増加するように設定しました。 – dchen71

+0

あなたの設定には、私が理解していないことがあります: 'comments'は配列か、配列内のオブジェクトですか? – JeanMel

+0

コメントは配列です。コメントは、user_id、comment、comment_idを含むコメントハッシュの配列で、1 +ポストごとの配列の長さとして定義されるように設定したいと思います。 – dchen71

関連する問題