You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MongoDB/Express API返回200状态码但未更新数据问题

Hey Jeff, let's break down why your MongoDB update isn't sticking even though you're getting a 200 OK from the API. I've run into this exact scenario a few times, so here are the key things to check step by step:

1. Fix the Frontend Request Body First (Common Pitfall!)

Looking at your fetch code, you're passing updatedFunctions directly as the body parameter—but fetch expects the body to be a JSON string, not a plain object. If you skip this serialization, your backend will receive garbage data (like [object Object]) and won't know what fields to update.

Here's the corrected frontend code:

fetch(`${API}${this.state.project.pin}`, {
  method: 'POST', // Pro tip: Consider using PUT/PATCH instead for update operations to follow REST conventions
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(updatedFunctions) // Critical: Convert your object to a JSON string
})

2. Verify Backend Update Logic

Since you haven't shared backend code yet, here are the most likely issues to check once you do:

  • Incorrect Query Condition: Make sure your backend is using the right field to target the document (e.g., pin from the URL params). If the pin value passed doesn't match any document in MongoDB, the update will return a success status but modify 0 documents. Add console logs to confirm the query value matches what's in your database.
  • Missing $set Operator: If you're using Mongoose or raw MongoDB queries, forgetting $set will replace the entire document instead of updating specific fields. Worse, if your query condition doesn't match, nothing happens at all. Example of correct syntax:
    // Mongoose example
    const updateResult = await Project.updateOne(
      { pin: req.params.pin }, // Target the correct document
      { $set: req.body } // Only update the fields in req.body
    );
    
  • Silent Errors in Backend: Your backend might be swallowing errors and returning 200 anyway. Wrap your update logic in a try/catch block and log errors to the console. For example:
    try {
      const updateResult = await Project.updateOne(...);
      console.log('Update result:', updateResult); // Check if nModified > 0
      if (updateResult.nModified === 0) {
        return res.status(404).json({ message: 'No project found or no changes needed' });
      }
      res.status(200).json({ message: 'Update successful' });
    } catch (err) {
      console.error('Update failed:', err);
      res.status(500).json({ message: 'Update failed', error: err.message });
    }
    

3. Confirm Request/Response Payloads

Use your browser's DevTools (Network tab) to:

  • Check that the request body contains the correct updatedFunctions data as JSON.
  • Verify the backend's response includes details like nModified (if using MongoDB) to confirm whether any documents were actually touched.

Start with the frontend body serialization fix—it's the most common culprit here. Once that's sorted, dig into the backend logs to ensure your query is targeting the right document and applying the update correctly.

内容的提问来源于stack exchange,提问作者Jeff Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 09:35:12