Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

332
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!