I have in a project the possibility to add several items at once. And I would like to be able to add several items using a csv.
To have more context (the schema) :
{
"_id": {"$oid": "xxxxxxxxxxxxxxxx"},
"nameCourse": "Name",
"description": "lorem ipsum",
"user": [{
"_id": {"$oid": "xxxxxxxxxxxxxxxx"},
"name": "John Doe",
"gender": "M",
"city": "New York",
"email": "[email protected]"
},
{
"_id": {"$oid": "xxxxxxxxxxxxxxxx"},
"name": "Jane Doe",
"gender": "F",
"city": "Tokyo",
"email": "[email protected]"
},
{
"_id": {"$oid": "xxxxxxxxxxxxxxxx"},
"name": "Jake Doe",
"gender": "M",
"city": "Paris",
"email": "[email protected]"
}],
}
(I'm using NodeJs/ MongoDb (with Mongoose) / Express / EJS )
It has a form with an input:file and a button.
<form method="POST" id="add_multiple_user">
<input type="file" name="user">
<button type="submit">Send</button>
</form>
<script>
$("#add_multiple_user").submit(function (event) {
event.preventDefault();
let idcourse = document.getElementById("id_course");
let unindexed_array = $(this).serializeArray();
let data = {};
$.map(unindexed_array, function (n, i) {
data[n["name"]] = n["value"];
});
let addAdresseMultiple = {
url: `/api/course/add-multiple-user/${idcourse.innerText}`,
method: "PUT",
data: data,
};
$.ajax(addAdresseMultiple).done(function (response) {
location.reload();
});
});</script>
Here my controller :
exports.addMultipleUser = async (req, res) => {
const { name, gender, city, email } = req.body;
try {
await UserModel.findOneAndUpdate(
{ _id: req.params.id },
{
$addToSet: {
user: {
name: name,
gender: gender,
city: city,
email: email,
},
},
},
(err, docs) => {
if (!err) return res.send(docs);
if (err) return res.status(400).send({ message: err });
}
);
} catch (err) {
return res.status(400).json({ message: err });
}
};
I saw that there some package (like fast csv) but i didn't understand at all how it can help me.