Home > Back-end >  How do I update by using updteOne in mongodb?
How do I update by using updteOne in mongodb?

Time:08-15

router.post("/list/:shortId/recomment/:p_shortId", async (req, res, next) => {
    const { shortId, p_shortId } = req.params;
    const { comment } = req.body;
    const email = req.tokenInfo.email;

    try {
        const authData = await User.findOne({email});
        const postData = await Post.findOne({shortId});
        const parentData = await Upment.findOne({p_shortId});

        const newcomment = await Downment.create({
            postType: 3,
            author: authData,
            post_id: postData,
            parentment_id: parentData,
            comment: comment
        });

        await Upment.updateOne({p_shortId}, {"$push": {"comments": newcomment._id}});

        res.status(200).json({
            result: 'recomment success'
        })

    } catch (err) {
        err.message = `${err.message}, market post recomment error.`;
        next(err);
    }

});

updateOne doesn't work so I changed it to update

router.post("/list/:shortId/comment", async (req, res, next) => {
    const { shortId } = req.params;
    const { comment } = req.body;
    const email = req.tokenInfo.email;
    
    try {
        const authData = await User.findOne({email});
        const postData = await Post.findOne({shortId});
        
        const newcomment = await Upment.create({
            postType: 3,
            author: authData,
            post_id: postData,
            comment: comment
        });
        
        // console.log(commentData);

        await Post.updateOne({shortId}, {"$push": {"comments": newcomment._id}});
        
        res.status(200).json({
            result: 'comment success'
        })

    } catch (err) {
        err.message = `${err.message}, market post comment error.`;
        next(err);
    }

});

then it worked. So I tried it in mongoDB Compass. like below

db.upments.updateOne({shortId: "wEhPg-wFqS0_2935vuZEQ"}, {"$push": {"comments": new ObjectId("62f38170e3dccbfe7a9842b2")}})

And this worked... Only in the code, updateOne worked properly why this thing happens? how should I fix it? thank you for listening question!!

here are schemas ^^ if you need anything more, let me know~

import mongoose from "mongoose"
import shortId from "./type/shortId.js"

const UpmentSchema = new mongoose.Schema({
    shortId,
    comment: String,
    // closet:1, OOTD:2, board:3 
    postType: {
        type: Number,
        required: true
    },
    author: {
        type: mongoose.Schema.Types.ObjectId,
        ref: "User",
        required: true
    },
    post_id: {
        type : mongoose.Schema.Types.ObjectId,
        ref: "Post",
        required: true
    },
    comments: [{
        type: mongoose.Schema.Types.ObjectId,
        ref: "Downment",
    }]
}, {
    timestamps: true
}
);


const DownmentSchema = new mongoose.Schema({
    shortId,
    comment: String,
    // closet:1, OOTD:2, board:3 
    postType: {
        type: Number,
        required: true
    },
    author: {
        type: mongoose.Schema.Types.ObjectId,
        ref: "User",
        required: true
    },
    post_id: {
        type : mongoose.Schema.Types.ObjectId,
        ref: "Post",
        required: true
    },
    parentment_id: {
        type : mongoose.Schema.Types.ObjectId,
        ref: "Upment",
        required: true
    },
}, {
    timestamps: true
}
);


export const Upment = mongoose.model("Upment", UpmentSchema);
export const Downment = mongoose.model("Downment", DownmentSchema);

CodePudding user response:

It was an error in update({p_shortId}) p_shortId is not in the upment model

await Post.updateOne({shortId}, {"$push": {"comments": newcomment._id}});

my mistake ^^...

  • Related