59 votes

Node.js - Créer des relations avec Mongoose

J'ai 2 schémas, Custphone y Subdomain . Custphone belongs_to a Subdomain y Subdomain has_many Custphones .

Le problème réside dans la création de la relation à l'aide de Mongoose. Mon objectif est de faire : custphone.subdomain et d'obtenir le sous-domaine auquel appartient le Custphone.

J'ai ceci dans mes schémas :

SubdomainSchema = new Schema
    name : String

CustphoneSchema = new Schema
    phone : String
    subdomain  : [SubdomainSchema]

Lorsque j'imprime le résultat du Custphone, j'obtiens ceci :

{ _id: 4e9bc59b01c642bf4a00002d,
  subdomain: [] }

Lorsque le Custphone le résultat a {"$oid": "4e9b532b01c642bf4a000003"} dans MongoDB.

Je veux faire custphone.subdomain et obtenir l'objet sous-domaine du custphone.

125voto

Dan Points 836

On dirait que vous cherchez à essayer le nouveau remplir dans Mongoose.

En utilisant votre exemple ci-dessus :

var Schema = mongoose.Schema,
    ObjectId = Schema.ObjectId;

SubdomainSchema = new Schema
    name : String

CustphoneSchema = new Schema
    phone : String
    subdomain  : { type: ObjectId, ref: 'SubdomainSchema' }

Le site subdomain sera mis à jour avec un '_id' tel que :

var newSubdomain = new SubdomainSchema({name: 'Example Domain'})
newSubdomain.save()

var newCustphone = new CustphoneSchema({phone: '123-456-7890', subdomain: newSubdomain._id})
newCustphone.save()

Pour obtenir réellement des données à partir du subdomain vous allez devoir utiliser une syntaxe de requête légèrement plus complexe :

CustphoneSchema.findOne({}).populate('subdomain').exec(function(err, custPhone) { 
// Your callback code where you can access subdomain directly through custPhone.subdomain.name 
})

-1voto

Connor Leech Points 1438

J'ai eu un problème similaire et j'ai dû utiliser Model.findByIdAndUpdate() de Mongoose.

docs : http://mongoosejs.com/docs/api.html#model_Model.findByIdAndUpdate

ce billet m'a aussi aidé : http://blog.ocliw.com/2012/11/25/mongoose-add-to-an-existing-array/comment-page-1/#comment-17812

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X