我尝试使用mongoose分页来处理分页预先搜索。
我有以下架构:
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');
我想为第1页找到24本书,其中任何书都包含作者姓名' jean'。我使用mongoose-paginate模块执行以下操作:
Book.paginate({}, {
page: 1,
limit: 24,
populate: {
path: 'authors',
select: 'name',
match: {
name: 'jean'
}
}, function (err, books) {
res.json(books);
});
但结果书包含其他作者数组为空的书。我不能使用books.filter()删除作者的书。但是,如果我这样做,我每页不能有24本书。
这样做的正确方法是什么?
答案 0 :(得分:0)
我建议在聚合查询中使用$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}
)