如何使用mongoose分页与填充和查询

我正在尝试使用mongoose分页处理与分页预先search。

我有以下模式:

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'); 

我想find24本书的第1页与任何书籍包含作者姓名'吉恩'。 我使用mongoosepaginate模块做以下事情:

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

但是结果书中包含着作者数组为空的其他书。 我不能使用books.filter()删除与作者的书。 但是,如果我这样做,我不能有24书每页的结果。

什么是正确的方法来做到这一点?

我build议在汇总查询中使用$lookup来代替填充。

 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} )