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

336
Vistas
El método Mongoose find () no devuelve ningún valor la primera vez que ejecuto el nodo

La idea es muy simple. Agrego 4 entradas en la colección 'frutas' dentro de 'frutasDB'. Cuando ejecuto server.js, en realidad agrega las entradas de la lista a la base de datos.

Cuando reviso la base de datos, dice que tengo 4 entradas [manzana, kiwi, naranja, plátano]. sin embargo, el método de búsqueda que es

 Fruit.find(function(err, fruits){ if(err){ console.log(err); } else { console.log(fruits); } });

devuelve una matriz vacía cuando ejecuto server.js por primera vez. Si ejecuto server.js por segunda vez y compruebo las colecciones desde dentro de MongoDB, dado que es la segunda vez que ejecuto el contenido de la nueva colección, se muestra como

[manzana, kiwi, naranja, plátano, manzana, kiwi, naranja, plátano]

Esta vez, el método find() muestra la matriz, pero solo 4 de ellos... ¿Qué estoy haciendo mal aquí?

ingrese la descripción de la imagen aquí

Servidor.js:

 const mongoose = require('mongoose'); main().catch(err => console.log(err)); // This section means connect to mongodb and create fruitsDB database inside that async function main() { await mongoose.connect('mongodb://localhost:27017/fruitsDB'); } const fruitSchema = new mongoose.Schema({ name: String, rating: Number, review: String }); const Fruit = mongoose.model('Fruit', fruitSchema); // MongoDB will automatically pluralize the collection name // const fruit = new Fruit({ // name: 'Apple', // rating: 7, // review: 'Pretty solid as fruit!' // }); // Comment out this section to prevent mongoose to // save fruit to fruits collection everytime you run server.js // fruit.save(); const peopleSchema = new mongoose.Schema({ name: String, age: Number }); const People = mongoose.model('People', peopleSchema); const people = new People({ name: 'John', age: 37 }); people.save(); const apple = new Fruit({ name: 'Apple', rating: 7, review: 'Pretty solid as fruit!' }); const kiwi = new Fruit({ name: 'Kiwi', rating: 10, review: 'The best fruit!' }); const orange = new Fruit({ name: 'Orange', rating: 4, review: 'Too sour for me!' }); const banana = new Fruit({ name: 'Banana', rating: 3, review: 'Weird texture!' }); Fruit.insertMany([apple, kiwi, orange, banana], function(error){ if(error){ console.log(error); } else { console.log('New entries are added to the database!'); } }); // Read the fruits collection Fruit.find(function(err, fruits){ if(err){ console.log(err); } else { console.log(fruits); } });
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

El método find() se ejecuta antes de que la base de datos tenga la oportunidad de almacenar los datos.
Puede almacenar la llamada insertMany() en una función asíncrona con await y poner su Fruit.find() después

 async function myFunc() { await Fruit.insertMany([apple, kiwi, orange, banana], function (error) { if (error) { console.log(error); } else { console.log('New entries are added to the database!'); } }); Fruit.find(function (err, fruits) { if (err) { console.log(err); } else { console.log(fruits); } }); } myFunc();

O aproveche las devoluciones de llamada de Promise y use .then() .

 myFunc().then(() => { Fruit.find(function (err, fruits) { if (err) { console.log(err); } else { console.log(fruits); } }); },err=> console.log(err));
about 4 years ago · Juan Pablo Isaza Denunciar

0

Debe esperar a que Mongoose se conecte a su servidor MongoDB, y luego debe realizar toda la lógica. Lo que puede hacer es poner toda la lógica en la función main() después await mongoose.connect('mongodb://localhost:27017/fruitsDB'); . Eso asegurará que Mongoose se conecte al servidor MongoDB antes de que se ejecute cualquier consulta DB.

 const mongoose = require('mongoose'); main().catch(err => console.log(err)); // This section means connect to mongodb and create fruitsDB database inside that async function main() { await mongoose.connect('mongodb://localhost:27017/fruitsDB'); const fruitSchema = new mongoose.Schema({ name: String, rating: Number, review: String }); const Fruit = mongoose.model('Fruit', fruitSchema); // MongoDB will automatically pluralize the collection name // const fruit = new Fruit({ // name: 'Apple', // rating: 7, // review: 'Pretty solid as fruit!' // }); // Comment out this section to prevent mongoose to // save fruit to fruits collection everytime you run server.js // fruit.save(); const peopleSchema = new mongoose.Schema({ name: String, age: Number }); const People = mongoose.model('People', peopleSchema); const people = new People({ name: 'John', age: 37 }); people.save(); const apple = new Fruit({ name: 'Apple', rating: 7, review: 'Pretty solid as fruit!' }); const kiwi = new Fruit({ name: 'Kiwi', rating: 10, review: 'The best fruit!' }); const orange = new Fruit({ name: 'Orange', rating: 4, review: 'Too sour for me!' }); const banana = new Fruit({ name: 'Banana', rating: 3, review: 'Weird texture!' }); Fruit.insertMany([apple, kiwi, orange, banana], function(error) { if (error) { console.log(error); } else { console.log('New entries are added to the database!'); } }); // Read the fruits collection Fruit.find(function(err, fruits) { if (err) { console.log(err); } else { console.log(fruits); } }); }
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