Push element to array in mongoose
13,439
Solution 1
As far as I know, you have to do as below.
Model.findAndUpdate({_id: 'your_id'},
{$push: {'your_array_field':
{"name": "foo","idAccount": 123456}}},
{new: true}, (err, result) => {
// Rest of the action goes here
})
Solution 2
We are doing it this way - we are adding another model but in your case your just adding an array so put that in a variable and in place of req.body.resource ..
Also you can just use findByIdAndUpdate not the Async if you don't want to.
here is the model element:
resources: [{type: mongoose.Schema.Types.ObjectId, ref: 'Resource'}],
here is the method to add an item to the array:
//AddResource to a crew
export function addResource(req, res) {
if (req.body._id) {
delete req.body._id;
}
Crew.findByIdAndUpdateAsync(req.params.id,
{
$push: { "resources": req.body.resource }
},
{ safe: true, upsert: true },
function (err, model) {
if (err) {
//console.log(err);
return res.send(err);
}
return res.json(model);
});
and to remove:
//deleteResource to a crew
export function deleteResource(req, res) {
if (req.body._id) {
delete req.body._id;
}
// console.log(req.body.resource);
Crew.findByIdAndUpdateAsync(req.params.id,
{
$pullAll: { "resources": req.body.resource }
},
function (err, model) {
// console.log(model);
if (err) {
//console.log(err);
return res.send(err);
}
return res.json(model);
});
Solution 3
We can do like that
Model.findOneAndUpdate({"_id":req.body.id},{
"$push": {"resources": req.body.resources}
},{new: true, safe: true, upsert: true }).then((result) => {
return res.status(201).json({
status: "Success",
message: "Resources Are Created Successfully",
data: result
});
}).catch((error) => {
return res.status(500).json({
status: "Failed",
message: "Database Error",
data: error
});
});`
Author by
isanma
I am a 22 year old student of Computer Science. Very interested in software development, specially MEAN stack.
Updated on June 05, 2022Comments
-
isanma almost 2 years
I am trying to push an element to an array in mongoose. I am doing it with update and $push. But it is not updating it in the database. This is my code. routes.js:
var Chooser = require('../chooser'); var appRouter = function(app) { app.put("/chooser/:id", function(req, res) { console.log("ID: ", req.params.id); if (!req.body.toFollow) { return res.send({"status": "error", "message": "The account that you want to follow is needed"}); } else { console.log("Cuenta: ", req.body.toFollow); Chooser.update({_id: req.params.id}, {$push: {accounts: {"name": "foo", "idAccount": 123456}}}); return res.send({"status": "ok"}); } }); }
This is my mongoose schema. Chooser.js:
var mongoose = require('mongoose'); var chooserSchema = mongoose.Schema({ _id: Number, accounts: [{name: String, idAccount: Number}] }, { _id: false }); var Chooser = mongoose.model('Chooser', chooserSchema); module.exports = Chooser;