Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

166
Vistas
Mongoose deleteMany() is deleting a future create()

Here is my full script:

import path from 'path'
import mongoose from 'mongoose'
import dotenv from 'dotenv'
import { SiteConfigModel } from '../src/feature/site-config/model'
import { siteConfigData } from '../data/siteConfigData'
import { UserModel } from '../src/auth/model/UserModel'
import { userData } from '../data/userData'

const configPath = path.join(__dirname, '..', '.env.local')
dotenv.config({ path: configPath })

const MONGO_URI = process.env.MONGO_URI || 'MISSING'

console.log(`Using mongo URI: ${MONGO_URI}`)

const mongoConnect = async () => {
  console.log('Attempting mongo connection...')
  const {
    connection: { host },
  } = await mongoose.connect(MONGO_URI)
  console.log(`MongoDB Connected: ${host}`)
}

const importSiteConfig = async () => {
  try {
    await SiteConfigModel.deleteMany()
    await SiteConfigModel.create(siteConfigData)
    console.log('Data imported!')
    process.exit(0)
  } catch (error) {
    console.error(error)
    process.exit(1)
  }
}

const importUsers = async () => {
  try {
    await UserModel.deleteMany()
    await UserModel.create(userData)
  } catch (error) {
    console.error(error)
    process.exit(1)
  }
}

mongoConnect()
importSiteConfig()
importUsers()

When I run it with ts-node ./scripts/seeder.ts the users collection is empty. However, if I make a small modification:

    const importUsers = async () => {
      try {
        // await UserModel.deleteMany()  // DELETE THIS LINE
        await UserModel.create(userData)
      } catch (error) {
        console.error(error)
        process.exit(1)
      }
    }

Then there are two records in the database.

I am not expecting this result, because the deleteMany() is coming before the create(). How come this is occuring?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

try this:

const importSiteConfig = async () => {
  try {
    await SiteConfigModel.deleteMany()
    await SiteConfigModel.create(siteConfigData)
    console.log('Data imported!')
  } catch (error) {
    console.error(error) // or throw error
  }
}

const importUsers = async () => {
  try {
    await UserModel.deleteMany()
    await UserModel.create(userData)
  } catch (error) {
    console.error(error) // or throw error
  }
}


(async()=> {
   try{
      await mongoConnect()
      await importSiteConfig()
      await importUsers()
      process.exit(0)
   }catch(e){
      process.exit(1)
   }
})()

Updated:

As I Test in my environment:

Project structure:

enter image description here

In my node.ts I have the following:

const mongoose = require("mongoose");
const { Schema } = mongoose;

const SiteConfigSchema = new Schema({
  config1: Boolean,
  config2: Boolean,
});

const UserModelShema = new Schema({
  name: String,
});

const configModel = mongoose.model("config", SiteConfigSchema);
const userModel = mongoose.model("user", UserModelShema);

const mongoConnect = async () => {
  console.log("Attempting mongo connection...");
  const {
    connection: { host },
  } = await mongoose.connect(`mongodb://localhost:27017/testdb`);
  console.log(`MongoDB Connected: ${host}`);
};

const importSiteConfig = async () => {
  try {
    await configModel.deleteMany();
    await configModel.create({ config1: true, config2: false });
    console.log("config Data imported!");

  } catch (error) {
    console.error(error); // or throw error
  }
};

const importUsers = async () => {
  try {
    await userModel.deleteMany();
    await userModel.create([{ name: "user 1" }, { name: "user 2" }]);

   console.log("user Data imported!");
  } catch (error) {
    console.error(error); // or throw error
  }
};

(async () => {
  try {
    await mongoConnect();
    await importSiteConfig();
    await importUsers();
    process.exit(0);
  } catch (e) {
    process.exit(1);
  }
})();

package.json:

{
  "name": "test",
  "version": "1.0.0",
  "main": "node.ts",
  "license": "MIT",

  "scripts": {
    "seeder": "npx ts-node node.ts"
  },
  "dependencies": {
    "mongoose": "^6.3.0",
    "typescript": "^4.6.3"
  }
}
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda