添加到集合对象中的对象中的数组会删除该对象中的所有其他数组。
考虑事件集合的成员:
{
"_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()
,会将 anx
添加到他们的attendeeFavorites
数组中,但它会删除所有其他条目。这把上面变成了:
{
"_id" : "EfEq7niEyLLatb7fb",
"attendeeFavorites" : {
"9Ze5M6CkHdLwkJdbu" : [
"x"
]
}
}
为什么会这样??
* 编辑 * 修改 发布功能
Meteor.publish('events', function(){
return Events.find({});
});
修复它,但这不是一个真正的解决方案,因为我不希望用户能够查看其他用户的收藏夹数组。