我编写了一个成功将数组(called: "wishlistArray")
插入现有代码的代码
使用数组push()函数的对象。
正如您已经猜到的那样,当用户想要将某个项目添加到他/她的愿望清单时会触发它。
为了清晰起见,在下面找到我的对象架构,表示具有用户ID的用户:" udEnfEmy5DSBvDsSy" 已经将对象添加到他/她的愿望清单"
_id: "DFhcAYAtMBviczogo"
createdDate: "04/12/2017"
expiryDate: "04/22/2017"
noOfViews: 125
wishListArray: Array[1]
0: Object
wishedBy: "udEnfEmy5DSBvDsSy"
为避免在 wishlistArray 数组中插入重复项,我会检查当前用户ID是否已存在于 wishlistArray 数组中,如下代码所示:
var selectedItemIDSet = Session.get('selectedItemIDSet');
var addToWishList = buyList.find(selectedItemIDSet);
var currentUser = [Meteor.user()._id ];
var wheatherWishListedOrNot = buyList.find({ _id:selectedID, 'wishListArray.wishedBy': {$in: currentUser } } ).count();
addToWishList.forEach(function(itemName){
var currentObjectID = itemName._id;
//### If wishListArrayArray array already exists in then...
if (itemName.wishListArray) {
var wishListArray = [,...itemName.wishListArray];
//### If current user hasnt wish listed item then add to Wish List (wishListArray) array
if (wheatherWishListedOrNot == "0") {
wishListArray.push({ wishedBy: Meteor.user()._id });
Session.set('wishListArrayToGo',wishListArray );
}
else if(wheatherWishListedOrNot == "1") {
//### Else if WishedListed by current user, Do absolutely nothing!
}
}
var wishListArray = Session.get('wishListArrayToGo');
buyList.update(currentObjectID, {$set: {wishListArray: wishListArray} });
});
在解释了我是如何实现这一目标之后,我遇到了相反的问题?如何从 wishListArray 数组中删除用户?
我尝试过以下代码但没有成功。
var selectedItemIDSet = Session.get('selectedItemIDSet');
var removeFromWishList = buyList.find(selectedItemIDSet);
var currentUser = [Meteor.user()._id ];
wheatherWishListedOrNot = buyList.find({ _id:selectedID, 'wishListArray.wishedBy': {$in: currentUser } } ).count();
removeFromWishList.forEach(function(itemName){
var currentObjectID = itemName._id;
//### If wishListArrayArray array already exists in then...
if (itemName.wishListArray) {
var wishListArray = [,...itemName.wishListArray];
//### If current user current user is on **WishedListArray**, then remove from **WishedListArray** array.
if (wheatherWishListedOrNot == "1") {
wishListArray.splice({ wishedBy: Meteor.user()._id });
Session.set('wishListArrayToGo',wishListArray );
}
else if(wheatherWishListedOrNot == "0") {
//### Else if current user isnt on WishedListArray, Do absolutely nothing!
}
}
var wishListArray = Session.get('wishListArrayToGo');
buyList.update(currentObjectID, {$set: {wishListArray: wishListArray} });
});
我尝试删除的代码对我来说似乎合乎逻辑,但无法从 WishlistArray 中删除用户ID。有人可以指出我哪里出错了吗?
提前致谢!
答案 0 :(得分:2)
您可以使用简单的mongo运算符实现您想要的功能。为了使它更简单,你可以使用一个字符串数组wishList
(userIds)。
要插入用户:
buyList.update(currentObjectID, { $addToSet: { wishList: userId} });
addToSet只会插入userId
(如果尚未插入)。
并再次将其删除:
buyList.update(currentObjectID, { $pull: { whishList: userId } });
怎么样?