Home > Software design >  MongoDB Get Field to Update a Value from Request Query
MongoDB Get Field to Update a Value from Request Query

Time:03-22

I have user object structured like this:

{
  "id": "",
  "username": "",
  "name": "",
  "bio": "",
  "email": "",
  "profileImg": "",
  "phoneNumber": 0,
  "messagingPoints": 0,
  "funds": 0,
  "inventoryId": "",
  "lastLogin": "2022-02-23T03:27:13.535Z",
  "isPrivate": false,
  "messagesReceived": []
}

I want to be able to reach a patch endpoint to update any of these fields. For example, /api/user?id=userId&name=John, should be able to grab the field "name" and set it to John. /api/user/id=?id=userId&[email protected] should grab the email field and set it to [email protected]

I am struggling to find docs for MongoDB to accomplish this, so I'm wondering if it is not possible? Do I need a specific endpoint for each of these update operations (ex: /api/user/name?id=userId&value=John instead of /api/user?id=userId&name=John)?

If it is possible, how could I accomplish this? Thanks!

CodePudding user response:

You can pass user ID in update filter. Also you can pass data in request body of the PUT request instead of query parameters.

app.put('/api/user', async (req, res) => {
  const { id, ...data } = req.body; 
  // Filter out any invalid fields

  // Update documents where id field is equal to value of id in request body
  await collection.updateOne(
    { id },
    { $set: data }
  );

  return res.json({ data: "User updated" })
})
  • Related