Je travaille donc actuellement sur un projet avec mongodb et nodejs et je me demandais comment mettre à jour des données dans mongodb via nodejs? Mon problème est que je veux conserver les anciennes données et en ajouter de nouvelles. Par exemple, voici les données actuellement dans mon mongodb
{
"_id" : ObjectId("5a1c0c1c3b147ec2e31cceb3"),
"event_id" : "1",
"event_medium" : "null",
"event_tags" : ["#JustTesting"]
}
Je souhaite donc ajouter de nouvelles données au tableau event_tags
tout en conservant les anciennes données.
Ainsi, par exemple, le résultat final serait le suivant:
{
"_id" : ObjectId("5a1c0c1c3b147ec2e31cceb3"),
"event_id" : "1",
"event_medium" : "null",
"event_tags" : ["#JustTesting", "#Test", "#Something"]
}
3 réponses
Vous devez utiliser la fonction de mise à jour de MongoDB pour cela. MongoDB connaît différents opérateurs de mise à jour, dans votre cas, vous pouvez utiliser {{X0 }} ou $pushAll
(le second est obsolète):
Mettre à jour les uns après les autres avec $push
YourCollection.update({ _id: 'xxx' }, { $push: { event_tags: '#Test' } });
YourCollection.update({ _id: 'xxx' }, { $push: { event_tags: '#Something' } });
Ou les deux à la fois avec $pushAll
(obsolète maintenant)
YourCollection.update({ _id: 'xxx' }, { $pushAll: { event_tags: ['#Test', '#Something'] } });
Pour interagir avec MongoDB depuis votre application NodeJS, j'utiliserais une bibliothèque comme celle-ci.
Je suppose que vous utilisez la mangouste.
eventModel.findOne({event_id:1 },
function(err, eventObj){
if(err){
//handle error
} else {
if(eventObj === null) {
//event doesnot exist
}
var tagList = eventObj.event_tags;
tagList.push('new_tag1');
tagList.push('new_tag2');
eventObj.event_tags = tagList;
eventObj.save(function(err){
if(err){
//handle error
} else {
//success
}
})
Votre point de départ est la fonction de mise à jour dans les opérations CRUD (Créer, Lire, Mettre à jour, Supprimer) dans Mongodb.
Votre programme de nœud doit avoir entre autres la fonction de mise à jour où vous définissez le champ _id que vous souhaitez mettre à jour et chargez les champs de contenu à mettre à jour dans 'data' par exemple comme ci-dessous:
myModel.prototype.update = function (_id, data, callback) {
const query = { _id: this.mongo.ObjectId(_id) };
debug(' update:' + JSON.stringify(query));
this.mongo.collection('mycollection').update(query, data, callback);
};
Ce morceau de code doit être placé dans votre modèle, si vous utilisez le modèle MVC.
Il y a beaucoup à faire. Honnêtement, je recommande un tutoriel plus approfondi comme les parties 3 et 4 de celui-ci pour nodejs et Mongoose (pilote mongo db): Tutoriel MDN pour mongo / node / express
Questions connexes
De nouvelles questions
node.js
Node.js est un runtime d'E / S asynchrone basé sur des événements, non bloquant qui utilise le moteur JavaScript V8 de Google et la bibliothèque libuv. Il est utilisé pour développer des applications qui font un usage intensif de la possibilité d'exécuter JavaScript à la fois sur le client et sur le serveur et bénéficient donc de la réutilisation du code et de l'absence de changement de contexte.