web-dev-qa-db-fra.com

Référencement d'un autre schéma dans Mongoose

si j'ai deux schémas comme:

var userSchema = new Schema({
    twittername: String,
    twitterID: Number,
    displayName: String,
    profilePic: String,
});

var  User = mongoose.model('User') 

var postSchema = new Schema({
    name: String,
    postedBy: User,  //User Model Type
    dateCreated: Date,
    comments: [{body:"string", by: mongoose.Schema.Types.ObjectId}],
});

J'ai essayé de les relier comme dans l'exemple ci-dessus mais je ne savais pas comment le faire. Finalement, si je pouvais faire quelque chose comme ça, ma vie serait très facile

var profilePic = Post.postedBy.profilePic
94
Gorkem Yurtseven

On dirait que la méthode de peuplement est ce que vous recherchez. Commencez par apporter de petites modifications à votre schéma de publication:

var postSchema = new Schema({
    name: String,
    postedBy: {type: mongoose.Schema.Types.ObjectId, ref: 'User'},
    dateCreated: Date,
    comments: [{body:"string", by: mongoose.Schema.Types.ObjectId}],
});

Alors fabrique ton modèle:

var Post = mongoose.model('Post', postSchema);

Ensuite, lorsque vous effectuez votre requête, vous pouvez renseigner les références de la manière suivante:

Post.findOne({_id: 123})
.populate('postedBy')
.exec(function(err, post) {
    // do stuff with post
});
157
nicksweet

Addendum: Personne n'a mentionné "Populate" - cela vaut vraiment la peine de perdre votre temps et votre argent à regarder la méthode de peuplement Mongooses: explique également le référencement de documents croisés.

http://mongoosejs.com/docs/populate.html

18
fino