Supposons que vous ayez une application où une opération simple de l'utilisateur implique la mise à jour plusieurs documents de différentes collections.MongoDB - Comment faire pour que plusieurs mises à jour soient toutes réussies?
J'ai fait deux ;-) des questions
Quelle est la meilleure façon de le faire, et comment faire en sorte que soit tout est correctement enregistré ou l'opération est annulée?
Im utilisant Mongoose
Solution A - callbacks emboîtées
En supposant que les deux userId et eventId sont fournies par côté client appel POST ou par prise
User.findById(userId,{},function(err,myUser){
if(err){
console.log('Error updating user...');
return;
}
else{
Event.findById(eventId,{},function(err,myEvent){
if(err){
console.log('Error updating user's Event...');
return;
}else{
console.log('Both user and event were successfully updated');
socket.emit('Update success!') || res.send(...);
});
});
Solution B - Appels parallèles
User.findById(userId,{},function(err,myUser){
if(err){
console.log('Error updating user...');
return;
}
else{
console.log('Success updating user');
socket.emit('..') || res.send('...');
});
Event.findById(eventId,{},function(err,myEvent){
if(err){
console.log('Error updating user's Event...');
return;
}else{
console.log('Success updating Event');
socket.emit('Update success!') or res.send(...);
});
En supposant que userId et eventId sont connus depuis le début, la solution B semble évidemment plus rapide. Quoi qu'il en soit, dans les deux cas, comment s'assurer d'effectuer une opération WRITE sur la base de données seulement si TOUTES les opérations d'écriture ont été un succès?
Est-ce que le fait que je doive faire cela signifie que mon schéma n'était pas bien conçu, et que je devrais fusionner des informations?
Merci pour vos réponses
Cela me suggère que vous vouliez vraiment de l'ACID et que vous deviez revenir à une base de données relationnelle. – duffymo