使用复选框信息更新MongoDB

时间:2016-10-10 16:25:00

标签: javascript node.js mongodb express

因此,我正在学习Node.js和Express,并使用它来制作一个简单的Web应用程序,在mongoDB数据库上执行CRUD操作。我可以成功地将信息插入数据库并更新它,但我似乎无法弄清楚如何更新复选框信息。注意我查看了Passing checkbox values to database using JavaScript,因为它在meteor.js中没有帮助

在我的EJS文件中。这是用户必须插入的信息,以便更新数据库中的匹配条目。为简洁起见,我省略了表格中的一些元素。

<div id="editForm" hidden>
    Enter name of the entry you want to edit?<input type="text" placeholder="full name" id="editItem" name="editItem" required><br>
    Full Name<input type="text" placeholder="full name" id="fullName" name="name" required><br>
   Age <input type="number" name="age" min="18" max="95" id="age" required><br>
    Programming Languages <br> <input type="checkbox" class="p_languages2" name="p_languages2" value="Java" required>Java
    <input type="checkbox" name="p_languages2" class="p_languages2" value="C++">C++
    <input type="checkbox" name="p_languages2" class="p_languages2" value="Python">Python
    <input type="checkbox" name="p_languages2" class="p_languages2" value="Ruby">Ruby
    <input type="checkbox" name="p_languages2" class="Jp_languages2" value="JavaScript">JavaScript<br>
    Available to start work? <input type="date" id="start_date" name="start_date" required><br>
    Life Motto? <input type="text" placeholder="motto" id="motto" name="motto" required><br> 
    <button onClick='putRequest()' type="submit" id="editEntry">Submit</button>
   </div>

function putRequest() {
    fetch('/view', {
        method: 'PUT',
        headers: {'Content-Type': 'application/json'},
        body: JSON.stringify({
          'editedItem': document.getElementById("editItem").value,
          'name': document.getElementById("fullName").value,
          'age': document.getElementById("age").value,
          //how can I extract the checkboxes?
          'start_date': document.getElementById("start_date").value,
          'motto': document.getElementById("motto").value
        })
     })

    window.location.reload(true);

这是我提出的额外信息请求。请注意,&#34; p_languages&#34;:req.body.p_languages只是一个占位符,我知道它不起作用。

app.put('/view', function(req, res) {
    console.log("Put is working!");
    db.collection('jobs').findAndModify(
         {"name": req.body.editedItem },
         {},
         {$set: 
            { "name": req.body.name , "job_title": req.body.job_title, "gender": req.body.gender,
            "p_languages": req.body.p_languages, "age": req.body.age, "start_date": req.body.start_date,"motto": req.body.motto }
         },
         {},
         function(err, object) {
             if (err){
                 console.warn(err.message);  // returns error if no matching object found
             }else{
                 console.log("Update complete");
             }
         })


})

1 个答案:

答案 0 :(得分:0)

您可以按照此name属性引用所有复选框, var checkboxes = document.getElementsByName("p_languages2");。这将返回带有p_languages2的数组复选框。现在,您只需要迭代此数组并获取所有选中的value复选框checkboxes[i].checked并将这些值存储在数组中并在服务器上更新该数组。 Refer to this plnkr