Skip to content
Advertisement

MongoDB Problems while inserting nested data

I try to build a database for a giveaway bot using MongoDB. Once a new giveaway is created the bot runs the following code to write the new giveaway into the databank:

const {mongoose} = require("mongoose")
const mainSchema = require('../models/mainSchema')

module.exports = {
  async execute(interaction){

  await new mainSchema ({
    guild_id: 1234567890,
    giveaways: [{
      identifier: 34,
      destination: 987654321,                      
    }],                                                                        
  }).save()
}

Giveaways should be a nested document in the document with the server’s information. My schemas for this looks like this:

const mongoose = require("mongoose");

const giveawaySchema = new mongoose.Schema({  
    identifier: String,
    destination: String,
    duration: String,
    price: String,
})

const mainSchema = new mongoose.Schema({
    guild_id: String,
    log_channel_id: String,
    twitterPreferncesType: String,
    twitterPreferncesFollowing: Boolean,
    giveaways: [giveawaySchema],
});

module.exports = mongoose.model("mainSchema", mainSchema);
module.exports = mongoose.model("giveawaySchema", giveawaySchema);

In my Mongo Atlas I have 2 collections mainSchema und giveawaySchema. If I run this code I only get an entry under ‘giveawaySchema’ consisting of this:

_id: ObjectId(62b4f6374894fb3e7826ca72)
__v:0

I don’t get any data in the mainSchema collection. Does anyone know what is the error? Thank you for your help in advance.

Advertisement

Answer

You should change your models exports to:

const Main = mongoose.model("mainSchema", mainSchema);
const Giveaway = mongoose.model("giveawaySchema", giveawaySchema);

module.exports = { Main, Giveaway }

Then, try to create the Giveaway entity before the Main one, and add that one to the new Main document:

const mongoose = require('mongoose');
const { Main, Giveaway } = require('../models/mainSchema');

module.exports = {
  async execute(interaction) {
    const newGiveaway = await Giveaway.create({
      identifier: 34,
      destination: 987654321,
    });

    await Main.create({
      guild_id: 1234567890,
      giveaways: [newGiveaway],
    });

    res.status(200).send('Creation completed');
  },
};
User contributions licensed under: CC BY-SA
5 People found this is helpful
Advertisement