2015-12-13 14 views
2

我正在嘗試讓Meteor應用程序讓用戶將值推送到數據庫。它工作正常,但有一個小問題。只要某個用戶推送了他的信息,我不想讓同一用戶創建另一個條目。或者這必須被阻止,或者用戶推送的值必須被第二次發佈的值覆蓋。現在我得到同一用戶的多個條目。如果某個字段值未被填充,我可以檢查是否僅推送一個值?

這是我的代碼。希望你能幫助我。提前致謝。

 Estimations.update(userstory._id, { 
      $addToSet: { 
       estimations: [ 
        {name: Meteor.user().username, estimation: this.value} 
       ] 
      } 
     }); 
+0

您可以使用當前名稱檢查存在名稱字段的集合,然後更新或插入值。我的意思是你需要寫在後端的條件。 –

回答

2

mongo docs

的$ addToSet操作者增加了一個值到一個數組除非值 已經存在,在這種情況下$ addToSet無助於該陣列。

由於您的數組元素是對象是整個對象,而不僅僅是用戶名鍵。這意味着只要estimation值不同,單個用戶就可以創建多個name, estimation對。

你可以做的是先刪除該用戶的任何值,然後重新插入:

var username = Meteor.user().username; 

Estimations.update({ userstory._id }, 
    { $pull: { estimations: { name: username }}}); // if it doesn't exist this will no-op 

Estimations.update({userstory._id }, 
    { $push: { estimations: { name: username, estimation: this.value }}}); 

通過評論的方式,你已經有了一個叫Estimations集合包含數組稱爲estimations包含與對象密鑰estimation。這可能會混淆項目未來的開發人員;)另外,如果您的Estimations集合與UserStory是1:1,那麼也許該陣列可能只是UserStory文檔中的一個關鍵?

相關問題