CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

JS MongoDB ( MEAN Stack ) : Relations entre collections

fluxies
fluxies
Niveau 17
24 mai 2015 à 17:51:43

Bonjour,

D'habitude en PHP, en relie nos tables avec les ids et retrouvons les info par ceux ci ( Table recette à l'id des ingrédients et vous connaissez la suite pour obtenir le nom d'ingrédient ).
Mais je me demande si c'est pas mieux sur MongoDB de stocker directement l'ingredient dans la collection ou juste certains champs, a cause de l'asynchronité qui complique le traitement back-end pour passer par l'id.

Exemple
var tmp = articles[0].getUserInformation(function (err, user) { console.log('usp' + user.pseudo); return user; }); console.log('tmp' + tmp.pseudo);

Cela retournera undefined pour tmp, et le bon resultat pour usp, ce que je comprends, mais alors comment m'organiser pour la suite, je suis encore perplexe, merci pour votre aide.

NB : Ma query :
Article.methods.getUserInformation = function (cb) { return Account.findById(this.user_id, cb); };

J'utilise mongoose btw

Message édité le 24 mai 2015 à 17:53:58 par fluxies
dark_drow
dark_drow
Niveau 15
24 mai 2015 à 18:46:15

ah en fait tu galère surtout à programmer de façon asynchrone en fait non ? Parce que je comprends pas bien ta question sinon. Quand tu utilise mongo tu va de toute façon stocker des objets dedans et dans ton ORM tu vas les sélectionner par leurs id ou leurs attributs.

J'ai peu de contexte, mais en théorie ta query tu devrais l'écrire :
Article.methods.getUserInformation = function (cb) { Account.findById(this.user_id, function (error, results) { if (error) cb(error); else cb(null, results); };

sinon regarde du côté des promises ou de async.js

Message édité le 24 mai 2015 à 18:46:51 par dark_drow
fluxies
fluxies
Niveau 17
24 mai 2015 à 18:55:51

Oui c'est exactement ca, j'ai jusqu'ici tout fait en asynchrone sans me poser de question, enfait j'avais pas assez de recul. Le contexte de l'opération est une boucle sur mes articles et je ne pensais pas pouvoir accéder à l'article dans la callback, alors que si.
Donc tout va bien je peux continuer.

Mais y'a quelquechose que je comprends pas, si je return le user et met un timeout de 3secondes, pour accéder à tmp après avoir trouvé l'user, tmp n'est toujours pas bon, ca je comprends pas. ( Le time out fonctionne bien )

fluxies
fluxies
Niveau 17
24 mai 2015 à 19:07:18

Maintenant je suis bloqué dans ce cas :

articles.forEach(function(article) {
                article.getUserInformation(function (err, user) {
                    article.auteur = user.pseudo;
                    articless[it][at] = article; // Cette etape est simplifiée
            });
res.json(articless);

Au moment du res.json, articless sera forcément vide, du coup je ne vois pas actuellement comment envoyer la liste, a moins de savoir quand on est dans le dernier article, mais je me demande si je m'y prends bien ou quelque chose m'échappe.

fluxies
fluxies
Niveau 17
24 mai 2015 à 20:16:41

Solution, utiliser la méthode 'populate' qui remplace votre id_associé par l'objet en lui même :

Article.find().populate('user_id').exec(function (err, articles) {
      console.log(articles[0].user_id.pseudo); // george

      res.json(articles);
});

Mon Article :
var Article = new mongoose.Schema({ user_id: { type : mongoose.Schema.ObjectId, ref : 'Account' }, equipe : String, pays_id : ... });

Sous forums
  • Aide à l'achat Mac
  • Macintosh
  • Création de sites web
  • Création de Jeux
  • Linux
  • Programmation
  • Internet
  • Steam Deck
  • Hardware
La vidéo du moment