Bonjour tout le monde,
Je suis en plein apprentissage de node et m'attaque actuellement a mongodbDB via mongoose. J'ai beaucoup de mal a comprendre comment mettre en place les relations du style OneToMany et aimerait donc un peu d'aide afin de mieux appréhender la chose !
J'essaie actuellement de faire un simple oneToMany entre un User et plusieurs adresses j'aimerai savoir si je m'y prends bien ou pas.
Voila mon entité User :
et mon entité Adresse:Code:
1
2
3
4
5
6
7
8
9
10
11
12
13 const mongoose = require('mongoose'); const Schema = mongoose.Schema; var adresses = require('./adress'); exports.schema = Schema({ name : {type: String,maxlength:50,required:true}, lastname: {type: String, maxlength: 50}, age: {type:Number,min:18}, job: String, tel: {type:String,maxlength:10}, adresses: [{type: Schema.Types.ObjectId, ref: 'Adresse'}] });
Dans mon controller j'essaie donc comme ca :Code:
1
2
3
4
5
6
7
8
9
10 const mongoose = require('mongoose'); const Schema = mongoose.Schema; exports.schema = Schema({ streetNumber: { type:Number,min:1,required:true}, streetName: { type: String, minLength:1,required: true}, codePostal: { type:Number, minLength: 1,maxlength:5,required: true}, user_id: {type:Schema.Types.ObjectId, ref:'User'} });
En gros, je fais une premiere requete pour recupérer le user correspondant à l'id passé en paramètre de la requete, puis je crée mon adresse avec le req.body et j'essaie ensuite de venir ajouter l'adresse au tableau d'adresse de l'utilisateur.Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42 exports.postadresses = (req,res)=>{ let user_id = {_id: req.params.id}; let userFind = null; const handleError = (error)=>{ if (error.name=== "CastError"){ res.status(400).json( {error: 'Unable to find the user with user_id: '+ req.params.id} )} else { res.status(500).json( { error: 'Server Error' } ) } }; models.User.findOne(user_id) .select("-_id") .execAsync() .catch(handleError) .then(utils.logContent) .then((user)=>{ userFind = user; }); models.Adress(req.body) .save() .then(utils.logContent) .catch(handleError) .then((adresses)=>{ console.log("USERRRRRRR : "+ userFind); userFind.adresses.push(adresses); userFind.save(); res.json(adresses); }) };
Pour l'instant je me retrouve déja bloqué par : userFind.adresses.push(adresses);
-> Cannot read property 'push' of undefined
Au dela de ça je ne suis pas sur de m'y prendre de la bonne manière et d'avoir bien compris le fonctionnement.
Merci de votre compréhension et pour votre aide!
Cordialement,