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

487
Vistas
NodeJS/MongoDB: ¿el campo se agrega solo una vez?

Estoy aprendiendo React with Node (Express/Mongoose) y MongoDB y todo parece funcionar como se esperaba ahora, pero tengo este gran problema:

 var userSchema = new mongoose.Schema({ login: { type: String, required: true, unique: true }, password: { type: String, required: true } }) app.post('/registerUser', function (req, res) { res.send(req.body) db.on('error', console.error.bind(console, 'connection error:')) // save user using model var user = new UserModel(req.body) user.save() }

Cada vez que PUBLIQUE el inicio de sesión y la contraseña, se guarda solo una vez y luego se termina.

Entonces, por ejemplo, si envío POST tres veces:

login=admin&password=admin

login=admin2&password=admin2

login=admin3&password=admin3

db.users.count() muestra 1 y solo el primer POST (admin:admin) está en la base de datos. El resto está siendo ignorado. Estoy ejecutando console.logs para ver qué está mal, pero cada POST obtiene un _id diferente, pero de alguna manera no guardo después del primero. Estaba pensando que tal vez hay algo mal con save y tal vez debería usar algo como update o create , pero todos los tutoriales que he visto y la documentación dicen que use save .

Cuando elimino el campo y la colección está vacía y luego envío POST, se guarda inmediatamente y luego ignora cualquier otro POST (segundo, tercero, etc.).

¿Qué estoy haciendo mal? Quiero tener más de 1 usuario en mi colección :(

[EDITAR]

Parece que mi ID se está creando "sobre la marcha", por lo que MongoDB debería activar la insert de acuerdo con los documentos: https://docs.mongodb.com/manual/reference/method/db.collection.save/#behavior (también yo' No estoy seguro de lo que está haciendo en este momento, porque tampoco parece una update :/)

over 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Su problema es que tiene una colección que tiene un índice único que impide la creación, así que simplemente elimine ese índice:

 db.users.dropIndex('index name here');

Consejo adicional:

1) db.on('error' no detectará errores de operación de db.

2) Siempre intente crear un registro y luego responda. En el caso de la experiencia del usuario, se debe informar al usuario si la cuenta se creó correctamente o no.

En resumen, mira este:

 db.on('error', console.error.bind(console, 'connection error:')) app.post('/registerUser', (req, res) => { // 1. check if user account exist const query = { login: req.body.login }; UserModel .findOne(query) .exec((error, user) => { if(error) { console.error('ERROR:', error); res.status(500).send({ type: 'system', message: 'Cannot create user record', trace: error }); return; } if(user) { res.status(405).send({ type: 'not-allowed', message: 'User record already exists' }); return; } // 2. create record if user account record does not exist UserModel.create(req.body, (error, user) => { if(error) { console.error('ERROR:', error); res.status(500).send({ type: 'system', message: 'Cannot create user record', trace: error }); return; } res.send(user); }); }); });
over 4 years ago · Santiago Trujillo Denunciar

0

OK, olvidé por completo que podía depurarlo usando la CLI de mongo, el problema fue bastante fácil de detectar desde allí. Si esto te sucede, prueba estos pasos:

Inicie la línea de comando/terminal del formulario mongo .

Intente replicar el nodo de acción problemático/controles de mangosta para usted, en mi caso estaba agregando nuevos usuarios:

use users db.users.save( { login: "fromCLI", password: "fromCLI" } ) db.users.save( { login: "fromCLI2", password: "fromCLI2" } )

Lea el mensaje de error, en mi caso fue:

"errmsg" : "E11000 duplicate key error collection: users.users index: username_1 dup key: { : null }"

No tengo índice de nombre de username . Solía tener. ¡Tuve que dejar la colección y luego mágicamente comenzó a funcionar!

over 4 years ago · Santiago Trujillo 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