MongoDB actualiza muchos si existen y crea si no. API de nodo

Estoy tratando de construir una API de rest de nodo basada en express.js.

Tengo función de post que está funcionando pero necesito algo más. Por ahora, envío datos utilizando Postman y mi solicitud de publicación se ve así:

[ { "id": 1, "name": "test", "points": 1}, { "id": 2, "name": "test2", "points": 2}, { "id": 3, "name": "test3", "points": 32}, { "id": 4, "name": "test4", "points": 423}, { "id": 5, "name": "test5", "points": 321} ] 

Y esta es mi función posterior:

 .post(function(req, res) { User.insertMany(req.body) .then(function(mongooseDocuments) { res.json({ message: 'User created!' }); }) .catch(function(err) { /* Error handling */ }); }) 

Pero ahora me gustaría actualizar la cantidad de puntos para los usuarios que están en la base de datos y si la identificación (cada usuario tiene su propia identificación, así que no puedo usar _id) no existe. Me gustaría crear un usuario basado en este esquema:

 var mongoose = require('mongoose'); var Schema = mongoose.Schema; var UserSchema = new Schema({ id: Number, name: String, points: Number }) module.exports = mongoose.model('User', UserSchema); 

Logré actualizar un usuario utilizando findOneAndUpdate pero estoy enviando una variedad de elementos y no tengo idea de qué hacer con varios elementos.

Gracias

Podrías iterar y hacer una operación a la vez.

Aquí hay una solución que utiliza async.js para iterar. Si sabes cómo hacer un bucle directamente usando Promesas, también puedes hacerlo.

 // assuming req.body is an array of all the users async.eachSeries(req.body, function upsert (obj, done) { User.findOneAndUpdate({ id: obj.id }, obj, { upsert: true, new: true }, done); }, function allDone (err) { if (err) return res.json(err); res.json({ message: 'Users created!' }); });