2013-10-10 12 views

Odpowiedz

-2

może używać populate() API. Interfejs API jest bardziej elastyczny, nie trzeba określać w schemacie ref i field.

http://mongoosejs.com/docs/api.html#document_Document-populate http://mongoosejs.com/docs/api.html#model_Model.populate

można mieszać i łączyć z find().

+3

Nie mogę zrozumieć z dokumentów. Czy możesz podać przykładowe zapytanie? –

+5

Jadąc do SO tylko po przeczytaniu dokumentacji, gdybym to zrozumiał, nie szukałbym tutaj odpowiedzi. – Azder

+0

Nadal musisz skonfigurować swój schemat, aby zapełnić zawartość, dodając odwołanie. – lukaserat

0

To jest przykład z użyciem kruszywa $ odnośnika do wypełnienia model o nazwie Zaproś z danego użytkownika na podstawie odpowiedniego email polu:

Invite.aggregate(
     { $match: {interview: req.params.interview}}, 
     { $lookup: {from: 'users', localField: 'email', foreignField: 'email', as: 'user'} } 
    ).exec(function (err, invites) { 
     if (err) { 
     next(err); 
     } 

     res.json(invites); 
    } 
); 

Nadszedł prawdopodobnie bardzo podobne do tego, co próbujesz zrobić.

24

ten jest wspierany od Mongoose 4,5 i nazywa virtuals population.

Trzeba zdefiniować kluczy obcych relacje po swoim schematów definicje i przed tworzenia modeli, podobnie jak to:

// Schema definitions 

BookSchema = new mongoose.Schema({ 
     ..., 
     title: String, 
     author_id: Number, 
     ... 
    }, 
    // schema options: Don't forget this option 
    // if you declare foreign keys for this schema afterwards. 
    { 
     toObject: {virtuals:true}, 
     // use if your results might be retrieved as JSON 
     // see http://stackoverflow.com/q/13133911/488666 
     //toJSON: {virtuals:true} 
    }); 

PersonSchema = new mongoose.Schema({id: Number, ...}); 


// Foreign keys definitions 

BookSchema.virtual('author', { 
    ref: 'Person', 
    localField: 'author_id', 
    foreignField: 'id', 
    justOne: true // for many-to-1 relationships 
}); 


// Models creation 

var Book = mongoose.model('Book', BookSchema); 
var Person = mongoose.model('Person', PersonSchema); 


// Querying 

Book.find({...}) 
    // if you use select() be sure to include the foreign key field ! 
    .select({.... author_id ....}) 
    // use the 'virtual population' name 
    .populate('author') 
    .exec(function(err, books) {...}) 
+2

Czy nie powinna to być teraz akceptowana odpowiedź? – Rexford

Powiązane problemy