2015-09-05 83 views
0

向集合對象中的對象添加數組會刪除該對象中的所有其他數組。修改集合對象的屬性將刪除所有其他屬性

考慮事件集合的成員:

{ 
     "_id" : "EfEq7niEyLLatb7fb", 
     "attendeeFavorites" : { 
       "mRRYzNBaFEmuqCrLi" : [ ], 
       "jbm8BJJ3PJCyWRJwz" : [ ], 
       "9Ze5M6CkHdLwkJdbu" : [ ], 
       "bH5q4himZawTTrbyc" : [ ] 
     } 
} 

attendeeFavorites的關鍵是用戶id。當該用戶登錄時,他們可能會將字符串添加到其相應的陣列。這是爲使活性代碼:

$meteor.autorun($scope, function() { 

    var event = $scope.$meteorObject(Events, {}).subscribe('events'); 

    if(event.attendeeFavorites && event.attendeeFavorites[Meteor.userId()]) { 
     $scope.favorites = event.attendeeFavorites[Meteor.userId()]; 
    } 
}); 

$scope.addFavorite = function(){ 
    $scope.favorites.push("x"); 
}; 

和發佈功能:

Meteor.publish('events', function(){ 
    var projection = { 
     name: 1 
    }; 
    projection["attendeeFavorites."+this.userId] = 1; 
    return Events.find({},{fields: projection}); 
}); 

例如,當用戶9Ze5M6CkHdLwkJdbu呼叫addFavorite(),一個x被添加到他們的attendeeFavorites陣列,不同之處在於它除去所有其他條目。這變成了:

{ 
     "_id" : "EfEq7niEyLLatb7fb", 
     "attendeeFavorites" : { 
       "9Ze5M6CkHdLwkJdbu" : [ 
         "x" 
       ] 
     } 
} 

爲什麼會發生這種情況?

*編輯* 返工發佈功能

Meteor.publish('events', function(){ 
    return Events.find({}); 
}); 

修復它,但這並不是真正的解決辦法,因爲我不希望用戶能夠查看其他用戶的收藏夾陣列。

+0

爲什麼不只列出與會者的ID,然後保留一個單獨的列表(可能是用戶自己的一部分),其中包含他們各自的最愛? –

+0

如果您在事件對象中存儲了某些內容,則訂閱該對象的任何人都可以查看其內容。您可以使用角度的ng-show/hide來僅顯示一個用戶的收藏夾,但信息仍然存在。消除其他用戶看到您的收藏的可能性的唯一方法是將其從原始「公共」事件對象中移除。 –

回答

0

創建一個訂閱,是特定的用戶:

Meteor.publish('user_favorites').then(function() { 
    return Events.find({attendeeFavorites: this.userId}) 
}); 

當您訂閱它這將只返回收藏爲與會者

然後:

$scope.favorites = $scope.$meteorCollection(Events).subscribe('user_favorites'); 

但是,如果你閱讀角流星文檔,最好使用$ scope。$ meteorSubscribe:

$scope.$meteorSubscribe('user_favorites', function() { 
    $scope.$meteorCollection(Events, false); // false will prevent it from updating the db automatically. remove if you do want it to update 
}); 

$ scope。$ meteorSubscribe將在範圍銷燬時自動終止訂閱。

請記住,我幾乎睡着了,如果這個不那麼滿足我將修復它在上午:)

編輯 - 我錯過了什麼,你想幹什麼,所以試試這個:

在偶數收集你保持與會者的名單由ID:

{ 
    attendees: ['afasd89as8d923', 'q23rqwasdfj23', '..'] 
} 

然後,每個用戶都可以使用包含相關的收藏夾參加活動的集合:

[ 
    {eventId: 'asdfasdf22q39f8', favorites: ['1', '2', '3']}, 
    {eventId: 'as2234assdf8989', favorites: ['asdf', 'foo', '3']} 
] 

你如何塑造你的最愛我不知道,但沒關係。每次用戶訪問一個頁面時,他/她已經可以訪問他們自己的收藏夾,那麼您只需顯示與該事件關聯的收藏夾即可。這當然是,如果你有每個事件不同的收益。

真的,你不需要在每個事件中都保留一個與會者列表,但是這可能會派上用場以用於其他目的。

+0

感謝您的回覆。我的第一個發佈函數返回所有事件,但只顯示該用戶在事件中的收藏夾數組。恐怕您的每個事件都會返回所有字段,用戶有一個與會者加入收藏。 –

+0

編輯下面原始答案。改變你如何儲存你的最愛將是最好的選擇。 –

+0

我同意這是對數據進行建模的更好方法,我最終可能會使用它。但是現在我真的很好奇,如果你要從數據中分離出所有的含義,我將如何解決原始問題。 –