Я пытаюсь сделать простую вещь, извлекая идентификатор пользователя из массива с базой данных mon goose on mon go и обновляя объект методом findByIdAndUpdate. здесь я использую методы $ pull '$ addToSet', такие как переключатель, для добавления и удаления userId из массива. Короче говоря, моя цель - понравиться при нажатии и в отличие от второго щелчка. поэтому я поместил '$ pull' и '$ addToSet' в тройное выражение и использовал его в методе findByIdAndUpdate () следующим образом:
exports.getLikeCounts = async (req, res) => {
const likes = Review({_id: req.params.id}).likes.map(obj => obj.toString());
//ternarry expression
const likeOperator = likes.includes(req.user._id) ? '$pull' : '$addToSet';
const likeReview = await Review
.findByIdAndUpdate( {_id: req.params.id},
{[likeOperator]: {likes: req.user._id}},
{new: true}
)
res.json(likeReview);
}
Здесь он только добавляет, но не извлекает идентификатор пользователя из массив при втором щелчке. Я не могу понять, чего не хватает, любая помощь будет оценена и спасибо.
структура моей модели выглядит так:
likes:[
{ type: mongoose.Schema.ObjectId, ref: 'User'}
]
NB: если я использую pull и addtoset напрямую вот так: {'$ pull' или '$ addToSet': {like: req.user._id}} для теста он работает, но в тернарном выражении, подобном тому, как я использовал выше, не работают оба, а работает только addtoset.