Bài toán like và count like .
Chào mọi người . Hiện tại em đang làm dự án về phần like và đếm số lượt like của 1 project. em dùng là mongoDB. ban đầu em làm là sẽ lưu mảng user ID like trong model của thằng project và có 1 biến countLike nữa. khi người dùng nhấn vào nút like hoặc dislike thì sẽ query trong projectID đó ra và check trong mảng likeUserId đã có UserId đó chưa nếu có thì sẽ là unlike thì sẽ xóa ID đó ra khỏi mảng và likeCOunt = likeCount - 1, Ngược lại thì thêm vào mảng và likeCount tăng 1. Hiện tại thì em đang dùng là UI update trước rồi gọi API nếu success thì sẽ oke còn nếu lỗi thì sẽ rollback trở lại UI trước. Bây giờ khách muốn em chuyển các thuộc tính của thằng like này qua bên model của User tức là thay vì lưu mảng UserID like ở project thì chuyển qua lưu mảng projectID được User thích ở model User, thế thì khi User like thì sẽ xử lý như thế nào để tối ưu nhất các bác và có cần mỗi lần like phải gọi lại API update data User mới nhất không. thanks các bác em đang dùng Angular và nodejs ạ. Thuật toán khi trước của em như sau:
- User => like/unlike=> update UI => gửi API => query bảng project => check UserID đã có chưa => add hoặc xóa UserID và tăng like COunt => trả về sucess, Nếu bị lỗi thì trả về lỗi và UI sẽ rollback bảng model project sẽ có chưa thuộc tính likeUserId : []string như này. Bây giờ chuyển sang lưu ở model User thì các bác nghĩ em nên làm thế nào ạ.
1 CÂU TRẢ LỜI
project user like là mối quan hệ n-n. Cách toàn diện nhất là tạo collection mới với 2 key projectId, userId. Như vậy có thể tìm ra ai đã like project cũng như user like project nào nhanh chóng.
Nếu không yêu cầu hiển thị những ai đã like project, có thể lưu projectId được like trong collection users, đồng thời tạo totalLikeCount trong collection projects. Khi like hay unlike thì cộng trừ số total này, đồng thời thêm/xóa projectId trong collection users.
Dạ em cảm ơn nhìu