Ransaka Ravihara
Ransaka Ravihara

Reputation: 1994

How to insert object array into MongoDb collection

I'm implementing user recovery system using NodeJS and mongoose. I need insert deleted user complains into deleted users collection. How to do that? when i delete user from collection that particular data should insert another collection name deleted users. It simmiler to user recovery system. My Module deletedUser.js

const mongoose = require('mongoose')

/**
 * Data model for deletedUser.
 */

const Schema = mongoose.Schema
const deletedUserSchema = new Schema({
    _id: {
        type: mongoose.Schema.Types.ObjectId,
        createIndex: true,
        required: true,
        auto: true
    },
    email: {
        type: String,
        required: true,
        unique: true,
        match: /[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?/
    },
    password: String,
    username: String,
    firstname: String,
    lastname: String,
    telephone: String,

    //address
    line1: String,
    line2: String,
    line3: String,

    nic: String,

    broadcasts: [],
    selling: [],
    complains: [],
    bookmarks: [],
    sellerReply: [],
    finalized: [],

    overallrate: Number,
    ratings: [],

    profileImage: String,
    replying:[],

    purchaseHistory: [],
    salesHistory: [],
    latestLog: Date,
    
    longitude: Number,
    latitude: Number,
    // expire_at: {type: Date, default: Date.now, expires: 3600*24*100}

})
module.exports = mongoose.model('deletedUser', deletedUserSchema, 'deletedUser')

And this is my attempts so far

// save deleted user data
router.post('/delete/:Id', async (req, res) => {
    const selectedUser = await User.findById(req.params.Id);
    // const deleteduser = new deletedUser({})
    // res.json(selectedUser._id);
    let testdata = [];
    // selectedUser.complains=this.testdata;
    console.log("When deleted"+selectedUser.complains)
    const deleteduser = new deletedUser({
        _id: selectedUser._id,
        email: selectedUser.email,
        password: selectedUser.password,
        username: selectedUser.username,
        firstname: selectedUser.firstname,
        lastname: selectedUser.lastname,
        telephone: selectedUser.telephone,
        line1: selectedUser.line1,
        line2: selectedUser.line2,
        line3: selectedUser.line3,
        nic: selectedUser.nic,
        broadcasts: selectedUser.broadcasts,
        selling: selectedUser.selling,
        complains: testdata.push(selectedUser.complains),
        bookmarks: selectedUser.bookmarks,
        sellerReply: selectedUser.sellerReply,
        finalized: selectedUser.finalized,
        overallrate: selectedUser.overallrate,
        ratings: selectedUser.ratings,
        profileImage: selectedUser.profileImage,
        replying: selectedUser.replying,
        purchaseHistory: selectedUser.purchaseHistory,
        salesHistory: selectedUser.salesHistory,
        latestLog: selectedUser.latestLog,
        longitude: selectedUser.longitude,
        latitude: selectedUser.latitude

    });
    deleteduser.save().then(data => {
        res.json(data);
    }).catch(err => {
        res.json({ message: err })
    });

});

Upvotes: 0

Views: 75

Answers (1)

Tunmise Ogunniyi
Tunmise Ogunniyi

Reputation: 2573

The current approach you have seems pretty okay to me, however, you can reduce the code involved with document.toObject method:

router.post('/delete/:Id', async (req, res) => {
  const selectedUser = await User.findById(req.params.Id);

  console.log("When deleted"+selectedUser.complains)

  // use toObject to convert the user model into a normal javascript object
  const deleteduser = new deletedUser(selectedUser.toObject());
  deleteduser.save().then(data => {
      res.json(data);
  }).catch(err => {
      res.json({ message: err })
  });

});

Upvotes: 1

Related Questions