在新创建的项目中按现有项目

发布于 2025-02-13 19:59:19 字数 1294 浏览 0 评论 0原文

现在,这是我的表格

<form action="/test" method="post">
<input type="text" name="name" id="">
    <input type="text" name="year" id="">
    <!-- This will let me select students from my database in new club by clicking on their checkbox -->
    <% students.forEach((student) => {%>
            <label for="student"><%=character.name%></label>
            <input type="checkbox" name="student" value="<%=student.roll%>">
        <%  }) %> 
    <button type="submit">Submit</button>
</form>

我的猫架架构。

const studentSchema = new mongoose.Schema({
  roll: String,
  reg: String
})


const clubSchema = new mongoose.Schema({
  name: String,
  year: String,
  members: [studentSchema]
})

我的app.js

app.get("/test",(req,res) => {
  Student.find({},(err,foundStudents) => {
    if(!err){
      res.render("test",{students: foundStudents})
    }
  })
    
})
app.post("/test",(req,res) => {
 const newClub = new Club ({
     name: req.body.name,
     year: req.body.year
  })

newClub.save()
})

现在我的问题是,我如何在俱乐部成员阵列中从表格中选择的那些学生在数据库中注册新俱乐部时?

预先感谢,我是编码的新手,这是我一直在玩的东西。如果您上面的任何内容都不清楚您在评论中问我,这是我第一次在网上询问帮助,因此可能会有一些错误。

This is my Form

<form action="/test" method="post">
<input type="text" name="name" id="">
    <input type="text" name="year" id="">
    <!-- This will let me select students from my database in new club by clicking on their checkbox -->
    <% students.forEach((student) => {%>
            <label for="student"><%=character.name%></label>
            <input type="checkbox" name="student" value="<%=student.roll%>">
        <%  }) %> 
    <button type="submit">Submit</button>
</form>

My Mongoose Schema

const studentSchema = new mongoose.Schema({
  roll: String,
  reg: String
})


const clubSchema = new mongoose.Schema({
  name: String,
  year: String,
  members: [studentSchema]
})

My app.js

app.get("/test",(req,res) => {
  Student.find({},(err,foundStudents) => {
    if(!err){
      res.render("test",{students: foundStudents})
    }
  })
    
})
app.post("/test",(req,res) => {
 const newClub = new Club ({
     name: req.body.name,
     year: req.body.year
  })

newClub.save()
})

Now my question is how do i add those students that i selected from my form in the members array of my clubSchema while registering the new club in database?

Thanks in advance and I am new to coding ,this is something i have been just playin with.If anything above is not clear to you please ask me in the comments,this is my first time asking help online so there might be some mistakes.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

空名 2025-02-20 19:59:20

当您需要在集合之间建立关系时,应使用参考,不应复制整个文档,因为数据将被复制。

test.ejs:

<form action="/test" method="post">
  <label>Club Name:</label>
  <input type="text" name="name" id="" />
  <br />
  <label>Year:</label>
  <input type="text" name="year" id="" />
  <br />
  <label>Members:</label>
  <br />
  <% students.forEach((student, index) => {%>
  <input
    type="checkbox"
    name="students"
    id="<%=index%>"
    value="<%=student._id%>"
  />
  <label for="<%=index%>"><%=student.name%></label>
  <% }) %>
  <br />
  <button type="submit">Submit</button>
  <br />
  <a href="/clubs">List Clubs</a>
</form>

型号:

const mongoose = require("mongoose");
mongoose.connect("mongodb://docker:mongopw@localhost:49153");

const studentSchema = new mongoose.Schema({
  name: String,
  reg: String,
});

const clubSchema = new mongoose.Schema({
  name: String,
  year: String,
  members: [{ type: mongoose.Schema.Types.ObjectId, ref: "Student" }],
});

let Student = new mongoose.model("Student", studentSchema);
let Club = new mongoose.model("Club", clubSchema);

(async function SeedDataBase() {
  let students = await Student.find();
  if (students.length === 0) {
    new Student({ name: "Paul", reg: "33735" }).save();
    new Student({ name: "Robert", reg: "48435" }).save();
    new Student({ name: "Mary", reg: "83765" }).save();
    new Student({ name: "Levandowisk", reg: "09555" }).save();
  }
})();

module.exports = { Student, Club };

clubs.ejs:

<a href="/test">Add Club</a>

<div>
  <%clubs.forEach((club) => {%>

  <label>Club Name: </label>
  <label><%=club.name%></label>
  <br />

  <label>Year: </label>
  <label><%=club.year%></label>
  <br />
  <label>Members:</label>
  <br />
  <%club.members.forEach((member) => {%>

  <label>Student Name: </label>
  <label><%=member.name%></label>
  <br />

  <% }) %>

  <br />

  <% }) %>
</div>

app.js:

const express = require("express");
const app = express();
const port = 3000;

const { Student, Club } = require("./Models");

app.set("view engine", "ejs");
app.use(express.urlencoded());

app.get("/test", (req, res) => {
  Student.find({}, (err, students) => {
    if (!err) {
      res.render("test", { students });
    }
  });
});

app.post("/test", (req, res) => {
  new Club({
    name: req.body.name,
    year: req.body.year,
    members: req.body.students,
  })
    .save()
    .then(() => {
      res.redirect("/clubs");
    });
});

app.get("/clubs", (req, res) => {
  Club.find()
    .populate("members")
    .then((clubs, err) => {
      if (!err) {
        res.render("clubs", { clubs });
      }
    });
});

app.listen(port);

When you need to make a relation between collections, you should use a reference, you should not copy the entire document, because data will be duplicated.

test.ejs:

<form action="/test" method="post">
  <label>Club Name:</label>
  <input type="text" name="name" id="" />
  <br />
  <label>Year:</label>
  <input type="text" name="year" id="" />
  <br />
  <label>Members:</label>
  <br />
  <% students.forEach((student, index) => {%>
  <input
    type="checkbox"
    name="students"
    id="<%=index%>"
    value="<%=student._id%>"
  />
  <label for="<%=index%>"><%=student.name%></label>
  <% }) %>
  <br />
  <button type="submit">Submit</button>
  <br />
  <a href="/clubs">List Clubs</a>
</form>

Models.js:

const mongoose = require("mongoose");
mongoose.connect("mongodb://docker:mongopw@localhost:49153");

const studentSchema = new mongoose.Schema({
  name: String,
  reg: String,
});

const clubSchema = new mongoose.Schema({
  name: String,
  year: String,
  members: [{ type: mongoose.Schema.Types.ObjectId, ref: "Student" }],
});

let Student = new mongoose.model("Student", studentSchema);
let Club = new mongoose.model("Club", clubSchema);

(async function SeedDataBase() {
  let students = await Student.find();
  if (students.length === 0) {
    new Student({ name: "Paul", reg: "33735" }).save();
    new Student({ name: "Robert", reg: "48435" }).save();
    new Student({ name: "Mary", reg: "83765" }).save();
    new Student({ name: "Levandowisk", reg: "09555" }).save();
  }
})();

module.exports = { Student, Club };

clubs.ejs:

<a href="/test">Add Club</a>

<div>
  <%clubs.forEach((club) => {%>

  <label>Club Name: </label>
  <label><%=club.name%></label>
  <br />

  <label>Year: </label>
  <label><%=club.year%></label>
  <br />
  <label>Members:</label>
  <br />
  <%club.members.forEach((member) => {%>

  <label>Student Name: </label>
  <label><%=member.name%></label>
  <br />

  <% }) %>

  <br />

  <% }) %>
</div>

App.js:

const express = require("express");
const app = express();
const port = 3000;

const { Student, Club } = require("./Models");

app.set("view engine", "ejs");
app.use(express.urlencoded());

app.get("/test", (req, res) => {
  Student.find({}, (err, students) => {
    if (!err) {
      res.render("test", { students });
    }
  });
});

app.post("/test", (req, res) => {
  new Club({
    name: req.body.name,
    year: req.body.year,
    members: req.body.students,
  })
    .save()
    .then(() => {
      res.redirect("/clubs");
    });
});

app.get("/clubs", (req, res) => {
  Club.find()
    .populate("members")
    .then((clubs, err) => {
      if (!err) {
        res.render("clubs", { clubs });
      }
    });
});

app.listen(port);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文