0

I have a User schema with a collections property that holds collection objects. These collection objects have a property called items that is an array of objects.

//User Schema
const UserSchema = new mongoose.Schema({
    username: {
        type: String,
        required : true,
    },
    password: {
        type: String,
        required: true
    },
    collections: [{type : mongoose.Schema.Types.ObjectId, ref: 'Collection'}]
}); 

//Collection Schema 
const CollectionSchema = new mongoose.Schema({
    items : [{type : mongoose.Schema.Types.ObjectId, ref: 'Item'}]
}); 

//Item Schema

const ItemSchema = new mongoose.Schema({
    title: {
        type: String,
        required: true
}); 

Using the code below, I tried creating and pushing a new Item Schema into the first collection object. I pass the _id of the collection object I want to update using the findById function. After finding the collection with my id, I simply just push a Item Schema into the collection object's items array. I get the res.status(200) yet my items array is never updated. Does anyone else have this issue? Thank you for you help.

userRouter.post('/addItem', passport.authenticate('jwt', {session: false}), (req, res) => {
    const item = new Item(req.body)

    item.save(err => {
        if(err)
            res.status(500).json({message: {msgBody: "Error has occured", msgError: true }});
        else {
            Collection.findById(req.body.search, function(err, coll){
                coll.items.push(item);
                req.user.save(err => {
                    if(err)
                        res.status(500).json(err)
                    else{
                        res.status(200).json(coll)
                    }
                })
            })
        }
    })
});

1 Answer 1

0

You don´t perform any update operation on the Collection with the newly created Item document in the database.

Add the created Item document by using the $addToSet operator (https://docs.mongodb.com/manual/reference/operator/update/addToSet/) to the items property in Collection (I would suggest by using mongoose findByIdAndUpdate method or updateOne method).

It would be something like this using callbacks:

Collection.findByIdAndUpdate(req.body.search, { $addToSet: {items: item._id}}, callback);

If you have multiple Item documents which you need to insert into Collection, you can use $addToSet in combination with the $each operator (https://docs.mongodb.com/manual/reference/operator/update/each/).

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.