2017-09-11 1 views
2

Ich versuche, Mungo Paginierung verwenden, um erweiterte Suche mit Seitenumbruch zu verarbeiten.wie mongoose Paginierung mit populate verwenden und abfragen

Ich habe folgende Schemata:

const authorSchema = Schema({ 
    _id: Schema.Types.ObjectId, 
    name: {type: String, unique: true}, 
});  
const Author = mongoose.model('author', authorSchema, 'author'); 

const bookSchema = Schema({ 
_id: Schema.Types.ObjectId, 
name: String, 
authors:[{type: Schema.Types.ObjectId, ref: 'author'}] 
}); 
const Book= mongoose.model('book', bookSchema , 'book'); 

ich für Seite 24 Buch finden möchten 1 mit jedem Buch enthält den Namen des Autors ‚jean‘. Ich nach dem mit mongoose-paginate Modul:

Book.paginate({}, { 
    page: 1, 
    limit: 24, 
    populate: { 
    path: 'authors', 
    select: 'name', 
    match: { 
     name: 'jean' 
    } 
    }, function (err, books) { 
     res.json(books); 
    }); 

aber das Ergebnis Bücher enthalten anderes Buch mit Autoren Array leer. Ich kann books.filter() nicht benutzen, um Buch mit Autoren zu entfernen. Aber wenn ich das tue, kann ich nicht 24 Buch pro Seite auf Ergebnis haben.

Was ist der richtige Weg?

Antwort

0

Anstatt zu füllen, empfehle ich $lookup in Aggregation Abfrage verwenden.

db.book.aggregate(
{$unwind:'$authors'}, 
{$lookup:{ 
    from: 'author', 
    localField: 'authors', 
    foreignField: '_id', 
    as: 'authors' 
    }}, 
    {$unwind: '$authors'}, 
    {$match: {'authors.name':'Jean'}}, 
    {$group: {_id: '$_id', authors: {$push: '$authors'}}}, 
    {$limit: 24} 
) 
+1

Dies verwendet nicht das Mungose-Paginat-Modul, können Sie eine Antwort mit dem Modul zeigen. – zubair1024

Verwandte Themen