gpt4 book ai didi

node.js - 如何使用 Mongoose 分页填充和查询

转载 作者:可可西里 更新时间:2023-11-01 10:48:44 27 4
gpt4 key购买 nike

我正在尝试使用 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 包含其他作者数组为空的书。我不能使用 books.filter() 删除有作者的书。但如果我那样做,我不能在结果上每页有 24 本书。

正确的做法是什么?

最佳答案

我建议使用 $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}
)

populate$lookup 支持之前的旧解决方案,我们应该努力使用最新的数据库功能。

关于node.js - 如何使用 Mongoose 分页填充和查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46147838/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com