2016-07-31 51 views
1

我想在像這樣的散列嵌套數組中選擇一個特定的元素。MongoDB - 流星:更新,添加和刪除數組中的一個元素

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

我的最終目標是要能夠添加/修改/刪除通過COMMENT_ID嵌套評論,但我有麻煩試圖選擇我需要擺在首位的元素。

回答

0

如果你只有commentspost對象,你只能有一個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

爲了將comments陣列,我們必須initialiaze的post文件(如果它尚未完成)中添加評論:

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

現在我們要檢索的的comments數組大小post更新:

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

相關問題