向集合對象中的對象添加數組會刪除該對象中的所有其他數組。修改集合對象的屬性將刪除所有其他屬性
考慮事件集合的成員:
{
"_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({});
});
修復它,但這並不是真正的解決辦法,因爲我不希望用戶能夠查看其他用戶的收藏夾陣列。
爲什麼不只列出與會者的ID,然後保留一個單獨的列表(可能是用戶自己的一部分),其中包含他們各自的最愛? –
如果您在事件對象中存儲了某些內容,則訂閱該對象的任何人都可以查看其內容。您可以使用角度的ng-show/hide來僅顯示一個用戶的收藏夾,但信息仍然存在。消除其他用戶看到您的收藏的可能性的唯一方法是將其從原始「公共」事件對象中移除。 –