Я сделал простую следующую систему, основанную на модели, которую я нашел в inte rnet.
follower: {
type: mongoose.Schema.Types.ObjectId, ref: 'User',
required: true,
},
followee: {
type: mongoose.Schema.Types.ObjectId, ref: 'User',
required: true,
},
start: {type: Date},
Когда пользователь следует за другим, я ' м просто добавив его в базу данных. Но я столкнулся с проблемой: как я могу узнать, подписан ли уже пользователь на другого, когда он посещает свой профиль? Итак, я сделал функцию проверки, которую я вызываю, только если пользователь аутентифицирован.
exports.check = (req, res, next) => {
Follow.findOne({
follower: req.userData.userId,
followee: req.params.id,
}).then((follow) => {
if (follow) {
res.status(200).json(true);
} else {
res.status(200).json(false);
}
});
};
Поскольку я не хочу загружать подписчиков / подписчиков пользователя ни за что, я добавил последователиCount и followCount в моей модели User, которую я увеличиваю каждый раз, когда пользователь подписывается / отписывается от кого-либо еще с помощью перехвата сообщений.
followSchema.post('save', function(doc){
User.findByIdAndUpdate({_id: this.follower}, {$inc : {'followingsCount' : 1}})
.then(
() => {
User.findByIdAndUpdate({_id: this.followee}, {$inc : {'followersCount' : 1}})
.then(
() => {
console.log('ok');
}
)
}
)
followSchema.post('findOneAndDelete', function(doc){
User.findByIdAndUpdate({_id: doc.follower}, {$inc : {'followingsCount' : -1}})
.then(
() => {
User.findByIdAndUpdate({_id: doc.followee}, {$inc : {'followersCount' : -1}})
.then(
() => {
console.log('ok');
}
)
}
)
Это работа в процессе, потому что сейчас у меня есть другая проблема, и я не знать, как это решить. Во-первых, я не уверен, что счетчики приращений после подписки / отмены подписей являются идеей, потому что, если что-то случится, о чем я не подумал, счетчик может быть искажен без возможности исправления.
Я сделал эти счетчики, потому что я хочу показать количество подписчиков / подписчиков в профиле пользователя (например, Twitter). Кто-нибудь есть идеи о том, как я могу знать это, не требуя полей в моей модели пользователя?
А теперь для моей основной проблемы: я хочу показать список подписчиков / подписчиков в профиле пользователя, но я также хочу знать, уже зарегистрированный пользователь уже подписан на этих пользователей. Как я могу сделать это за один звонок? Потому что я думаю, что выборка пользователя один за другим и вызов моей функции проверки - плохая идея.
Может быть, я не в порядке