Hỏi về Pupolate trong mongoose?



  • Em có tạo 2 collection:
    Một là, collection posts (nội dung bài viết) có một bài viết chứa một thuộc tính user là _id của tài khoản đăng bài viết.

    0_1541414478398_image.png

    Hai là, collection user (tài khoản). Tài khoản trong ảnh bên dưới viết bài ở trên nên _id trùng với giá trị thuộc tính "user" trong hình trên.

    0_1541414438712_image.png

    Em có lên trang của mongoose đọc tài liệu và xem theo clip này: https://www.youtube.com/watch?v=3p0wmR973Fw.
    Điều em cần là truy vấn bài viết ở trên và kèm theo thông tin của user đã đăng bài viết luôn nhưng truy vấn thì chỉ ra nội dung của bài viết.
    Phần Schema em đã làm:

    0_1541419278379_image.png

    Truy vấn:

    0_1541420276271_image.png

    Kết quả dạng json:

    0_1541420128218_image.png

    Em nghĩ có thể đã sai phần nào đó khi làm database, mọi người cho em hỏi là populate dựa vào cái gì để nó truy vấn collection khác và cách để giải quyết vấn đề em đang gặp phải với ạ? Hoặc nếu có một demo nhỏ nhỏ về phần này thì cho em xin với ạ!!!
    Em xin cảm ơn!



  • sửa .populate('users') thành .populate('user')



  • Không được luôn ạ. Nó vẫn không truy vấn được :((
    Để .populate('users') thì nó còn ra kết quả phía trên. Để .populate('user') thì nó không ra gì luôn ạ!



  • model của users đâu?



  • Không liên quan trực tiếp đến câu hỏi của bạn, mình chỉ góp ý.
    Bạn đang sử dụng NoSQL theo tư duy của SQL
    Nếu là NoSQL thì user nên có đầy đủ những fields cần thiết đến posts ( k cần phải có tất cả các fields )



  • @Sinh-Danh Mình có sửa lại theo một hướng dẫn khác:

    0_1541474129986_image.png

    Nhưng nó vẫn không đúng theo ý muốn...

    Không biết khi mình viết bài mới thì mình cần lưu tối thiểu những trường nào và trong collection nào?

    Ở đây mình tạo user trước rồi viết bài sau, không biết khi lưu vào DB thì như bên có hợp lý không? Đây là 2 Schema để mình .create():

    0_1541474516214_image.png



  • @CodeConCat Mình hiểu ý của bạn. Mình có tham khảo trên W3Schools thì họ sử dụng MongoDB với các thuộc tính:

    0_1541474778729_image.png

    Từ product_id họ join tới _id của collection product thì họ vẫn ra được kết quả.



  • Cảm ơn mọi người rất nhiều.. Mình đã tìm được giải pháp!!
    Chỉ cần thay thuộc tính trong populate() là được ngay..

    0_1541476733461_image.png

    Và kết quả nhận được:

    0_1541476769075_image.png


Log in to reply