向集合对象中的对象添加数组会删除该对象中的所有其他数组。修改集合对象的属性将删除所有其他属性
考虑事件集合的成员:
{
"_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来仅显示一个用户的收藏夹,但信息仍然存在。消除其他用户看到您的收藏的可能性的唯一方法是将其从原始“公共”事件对象中移除。 –