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 :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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'}]
});
et mon entité Adresse:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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'}
 
});
Dans mon controller j'essaie donc comme ca :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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);
    })
 
};
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.
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,