2013-03-04 3 views
0

J'essaie de créer un tableau d'objets imbriqués. Je suivais un exemple d'un livre qui effectue les opérations suivantes:Façon correcte de créer des objets imbriqués dans mongo

 // Creates the Schema for the Features object (mimics ESRI) 
     var Phone = new Schema({ 
      number: { type: Number, required: false }, 
      ... 
      personId: {type: Schema.Types.ObjectId} 
     } 
    ); 

     // Creates the Schema for the Attachments object 
     var Person = new Schema({ 
     name: { type: String }, 
     phones: [Phone] 
     } 
    ); 

    var Person = mongoose.model('Person', Person); 

Ce qui fonctionne très bien lors de l'enregistrement de plusieurs téléphoniques # 's pour une personne. Cependant je ne suis pas sûr s'il y a un moyen bon/rapide pour obtenir un objet de téléphone par _id. Puisque Phone n'est pas un modèle de mangouste, vous ne pouvez pas aller directement à Phone.findOne ({...}); En ce moment, je suis coincé avec l'obtention d'une personne par _id puis en boucle sur les téléphones des personnes et de voir si l'id correspond.

Puis je suis tombé sur ce lien: http://mongoosejs.com/docs/populate.html

est une façon plus juste que l'autre? Actuellement, lorsque je supprime une personne, ses téléphones disparaissent également. Pas vraiment sûr que cela fonctionne avec «peupler», semble que je devrais supprimer la personne et les téléphones.

Quelqu'un veut essayer d'expliquer les différences?

Merci à l'avance

Répondre

1

La règle générale est que si vous avez besoin d'interroger de façon indépendante les téléphones, alors vous devez les conserver dans une collection séparée et utiliser populate pour les regarder de People en cas de besoin. Sinon, les intégrer est généralement un meilleur choix car il simplifie les mises à jour et la suppression. Lorsque vous utilisez une approche imbriquée comme vous le faites actuellement, notez que les tableaux Mongoose fournissent une méthode id que vous pouvez utiliser pour rechercher plus facilement un élément avec sa valeur _id.

var phone = person.phones.id(id); 
+0

Explication parfaite, merci beaucoup! – lostintranslation

Questions connexes