Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何更新MongoDB中数组NodeJS中的特定对象_Javascript_Node.js_Reactjs_Mongodb_Mongoose - Fatal编程技术网

Javascript 如何更新MongoDB中数组NodeJS中的特定对象

Javascript 如何更新MongoDB中数组NodeJS中的特定对象,javascript,node.js,reactjs,mongodb,mongoose,Javascript,Node.js,Reactjs,Mongodb,Mongoose,我正在创建预订系统,现在我需要更新数组中的特定对象 { "_id":{ "$oid":"5f3fdcf463153719845e32e9" }, "do_kogo":"Doctor", "Startdate":"8/21/2020, 1:00:00 AM", "EndDate":"8/2

我正在创建预订系统,现在我需要更新数组中的特定对象

{
   "_id":{
      "$oid":"5f3fdcf463153719845e32e9"
   },
   "do_kogo":"Doctor",
   "Startdate":"8/21/2020, 1:00:00 AM",
   "EndDate":"8/21/2020, 2:00:00 AM",
   "StartdateFormatPL":"21.08.2020, 01:00:00",
   "EndDateFormatPL":"21.08.2020, 02:00:00",
   "godziny":[
      {
         "id":"rbprEs",
         "hour":"21.08.2020, 01:00:00",
         "isBooked":false,
         "isConfirmed":false
      },
      {
         "id":"lT8WkM",
         "hour":"21.08.2020, 01:05:00",
         "isBooked":false,
         "isConfirmed":false
      },
      {
         "id":"n4PJ3V",
         "hour":"21.08.2020, 01:10:00",
         "isBooked":false,
         "isConfirmed":false
      },
      {
         "id":"aHM-Gn",
         "hour":"21.08.2020, 01:15:00",
         "isBooked":false,
         "isConfirmed":false
      },
      {
         "id":"-EFbRV",
         "hour":"21.08.2020, 01:20:00",
         "isBooked":false,
         "isConfirmed":false
      },
      {
         "id":"X64wkx",
         "hour":"21.08.2020, 01:25:00",
         "isBooked":false,
         "isConfirmed":false
      },
      {
         "id":"eXv451",
         "hour":"21.08.2020, 01:30:00",
         "isBooked":false,
         "isConfirmed":false
      },
      {
         "id":"xxni5q",
         "hour":"21.08.2020, 01:35:00",
         "isBooked":false,
         "isConfirmed":false
      },
      {
         "id":"sTkns7",
         "hour":"21.08.2020, 01:40:00",
         "isBooked":false,
         "isConfirmed":false
      },
      {
         "id":"MaffJR",
         "hour":"21.08.2020, 01:45:00",
         "isBooked":false,
         "isConfirmed":false
      },
      {
         "id":"8DFBra",
         "hour":"21.08.2020, 01:50:00",
         "isBooked":false,
         "isConfirmed":false
      },
      {
         "id":"3Jb5yE",
         "hour":"21.08.2020, 01:55:00",
         "isBooked":false,
         "isConfirmed":false
      }
   ],
   "__v":{
      "$numberInt":"0"
   }
}
我需要的是通过它的
id:5f3fdcf463153719845e32e9
找到主对象,然后从
godziny[]
找到它的id,比如“rbprEs”。之后,我需要将
isBooked
值从false更改为True或以其他方式更改

我需要得到:

{
             "id":"rbprEs",
             "hour":"21.08.2020, 01:00:00",
             "isBooked":true,
             "isConfirmed":false
          },
我正在尝试下面的代码,但它不能正常工作

    router
.post("/upgrade/:id/:id2", (req, res) => {
  ReservationHours.findOneAndUpdate(
    { 
      // convert id to object id if not using (mongoose.Types.ObjectId(req.params.id))
      _id: req.params.id, 
      godziny: {
          $elemMatch: {
              id: req.params.id2,
              isBooked: false
          }
      }
    },
    // use positional operator $ to update in specific object
    { $set: { "godziny.$.isBooked": true } }
  )
  .then(ReservationHours =>
      ReservationHours.save().then(() => res.json({ success: true }))
  )
  .catch(err => res.status(404).json({ success: false }));
});
但如何获取和更新如此嵌套的参数呢

在该职位的回应中也要编码:

export const updateReservationHours = (id, id2) => (dispatch, getState) => {
    axios.post(`/reservationshours/${id}/${id2}`, tokenConfig(getState)).then(res =>
      dispatch({
        type: UPDATE_RESERVATION_HOURS,
        payload: (id, id2)
      })
    )
    .catch(err =>
      dispatch(returnErrors(err.response.data, err.response.status))
    );
  };
你可以试试


如果第二个id“rbprEs”也是作为req.param发送的呢?您是指多个id?或者动态ID你可以设置它检查更新的评论我的意思是我正在发送两个参数。首先确定主要对象。然后第二个id识别数组中的特定对象,该数组位于主对象中。是的,我的答案是什么,如果我错了,我不理解你,你能用示例和代码给出正确的理解吗。编辑的主要帖子。如果你有更多的问题,我会更新。
ReservationHours.findOneAndUpdate(
  { 
    // convert id to object id if not using (mongoose.Types.ObjectId(req.params.id))
    _id: req.params.id, 
    godziny: {
        $elemMatch: {
            // you can set it dynamic by using (req.params.godziny)
            // if its multiple and array then use id: { $in: req.params.godziny }
            id: "rbprEs", 
            isBooked: false
        }
    }
  },
  // use positional operator $ to update in specific object
  { $set: { "godziny.$.isBooked": true } },
  // get updated original document
  { projection: { "godziny.$": 1 } } 
)
.then(ReservationHours =>
    ReservationHours.save().then(() => res.json({ success: true }))
)
.catch(err => res.status(404).json({ success: false }));