【问题标题】:Pushing data to database subdocument arrays from POST request从 POST 请求将数据推送到数据库子文档数组
【发布时间】:2021-11-19 23:42:00
【问题描述】:

当我从客户端创建新架构时,我不知道如何将数据添加到猫鼬子文档。发送到数据库的唯一数据是未嵌套在另一个模式/数组中的数据。

我使用 MongoDB 和 Mongoose 作为我的数据库和 NextJS 作为我的前端和后端。

我还没有找到一种方法来让它工作。任何帮助将不胜感激。

这是后端路由:

export default async (req, res) => {
  const { method } = req;
  switch (method) {
    case "POST":
      try {
        const workout = req.body;
        const newWorkout = new Workout({ ...workout });
        await newWorkout.save();
        res.status(201).json({ success: true, data: newWorkout });
      } catch (error) {
        res.status(400).json({ success: false });
      }
      break;

这是猫鼬模式:

import mongoose from "mongoose";

const reqString = {
  type: String,
  required: true,
};

const WodSchema = new mongoose.Schema({
  exerciseName: reqString,
  repCount: reqString,
});

const exerciseSchema = new mongoose.Schema({
  workoutName: String,
  workoutContent: [WodSchema],
});

const WorkoutSchema = new mongoose.Schema({
  name: { type: String },
  workout: [exerciseSchema],
  // timestamps: true,
});

module.exports =
  mongoose.models.Workout || mongoose.model("Workout", WorkoutSchema);

这是前端发布请求(只有name 被发送到数据库):

  const [name, setName] = useState("");
  const [workoutName, setWorkoutName] = useState("");
  const [exerciseName, setExerciseName] = useState("");

  const editProgram = async () => {
    try {
      const res = await fetch(`http://localhost:3000/api/workouts/`, {
        method: "POST",
        headers: {
          Accept: "application/json",
          "Content-Type": "application/json",
        },
        body: JSON.stringify({ name, workoutName, exerciseName }),
      });
    } catch (error) {
      console.log(error);
    }
  };

【问题讨论】:

  • workout 是一个子文档数组,您需要在new Workout() 中相应地格式化您传递给它的数据。
  • 你有什么例子吗?

标签: javascript node.js mongodb mongoose next.js


【解决方案1】:

解决方案:

case "POST":
      try {
        const workout = req.body;
        const newWorkout = new Workout({
          name: workout.name,
          workout: {
            workoutName: workout.workoutName,
            workoutContent: {
              exerciseName: workout.exerciseName,
              repCount: workout.repCount,
            },
          },
        });
        await newWorkout.save();
        res.status(201).json({ success: true, data: newWorkout });
      } catch (error) {
        res.status(400).json({ success: false });
      }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    相关资源
    最近更新 更多