Course Content
Subtitle Guide – Hướng dẫn thêm phụ đề
0/1
02 – Optional React Refresher
0/77
03 – NextJS Essentials (App Router)
0/49
15 – Optional NextJS Summary
0/37
16 – Course Roundup
0/1
Next.js 14 & React – The Complete Guide
About Lesson

Here’s a little optional improvement you could add to the code.

At the moment, we’re always fetching all (!) comments – no matter for which event we sent a GET request.

We might just want to fetch the comments that belong to that specific event instead.

You can adjust the code to ensure that only the comments for a specific event (by event id) are fetched.

For this, you need to change the code in two places.

1) In helpers/db-util.js, add an extra, optional parameter (with a default value) to the getAllDocuments() parameter list:

export async function getAllDocuments(client, collection, sort) { ... }

becomes

export async function getAllDocuments(client, collection, sort, filter = {}) { ... }

The filter = {} parameter allows us to set a filter for finding documents. The default (an empty object: {}) ensures that NO filter is applied (i.e. we get ALL documents).

To use this filter, also change the find() method inside of the getAllDocuments() function:

const documents = await db
    .collection(collection)
    .find(filter) // this changed - we use the "filter" parameter!
    .sort(sort)
    .toArray();

2) In pages/api/comments/[eventId].js, pass a value for the filter argument:

Inside of the req.method === 'GET' block, change the way you call getAllDocuments().

const documents = await getAllDocuments(
    client,
    'comments',
    { _id: -1 },
);

should become

const documents = await getAllDocuments(
    client,
    'comments',
    { _id: -1 },
    { eventId: eventId } // this was added!
);

By adding these changes, you ensure that you only fetch the comments that really belong to a specific event.