Bài toán đưa ra: truy vấn lấy danh sách tin nhắn có phân trang và lấy thông tin của user gửi tin nhắn để thêm field mới vào document để tra về danh sách
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
list: async(req,res) => { try { const pageNumber = parseInt(req.params.page); // chuyển đổi số trang hiện tại thành kiểu dữ liệu integer const pageSize = parseInt(req.params.perpage); // chuyển đổi số lượng tin nhắn trên mỗi trang thành kiểu dữ liệu integer const messages = await Messages.find() .sort({ createdAt: -1 }) // sắp xếp các tin nhắn theo thời gian tạo mới nhất .skip((pageNumber - 1) * pageSize) // bỏ qua số lượng tin nhắn trên các trang trước đó .limit(pageSize) // giới hạn số lượng tin nhắn được trả về trên trang hiện tại .exec(); const messageIds = messages.map((message) => message.userid); // lấy tất cả các ID người dùng có trong danh sách tin nhắn const users = await User.find({ _id: { $in: messageIds } }); // tìm tất cả các người dùng có ID nằm trong danh sách người dùng const messagesWithUsers = messages.map((message) => { // thêm thông tin người dùng vào mỗi tin nhắn const userInfo = users.find((user) => user._id.equals(message.userid)); // tìm người dùng có ID trùng khớp với ID người dùng trong tin nhắn return { ...message.toObject(), // chuyển đổi đối tượng tin nhắn thành một đối tượng đơn giản để dễ dàng thêm thông tin người dùng vào userInfo: userInfo.toObject(), // thêm thông tin người dùng vào tin nhắn }; }); const totalMessages = await Messages.countDocuments({}); // đếm tổng số lượng tin nhắn trong cơ sở dữ liệu const results = { data: messagesWithUsers, // thêm danh sách tin nhắn với thông tin người dùng vào kết quả trả về total: totalMessages, // thêm tổng số lượng tin nhắn vào kết quả trả về }; res.status(200).json(results); // trả về danh sách tin nhắn cùng với tổng số lượng tin nhắn } catch (err) { //console.error(err); // ghi log lỗi nếu xảy ra lỗi res.status(200).json({ error: 'Server error' }); // trả về phản hồi lỗi } } |
Mọi sự sao chép xin ghi rõ nguồn là fcwordpress.net
Chuyên trang về wordpress: hướng dẫn thiết kế theme, plugin, thủ thuật wordpress