【发布时间】:2021-09-19 02:39:28
【问题描述】:
我有 2 个模型:
Books.Schema = {
id,
name,
description,
type: ObjectID(populate to Types.Schema),
}
Types.Schema 为:
Types.Schema = {
id,
name,
}
我想编写一个函数来获取与“searchKeyWords”匹配的所有书籍。我写了一个这样的函数:
let list = await Books.find({
$or:[
{"name": {"$regex": req.query.search}},
{"description": {"$regex": req.query.search}}
]
})
list = await Types.populate(list, {path: "type", model: "Types", select: "id name", options: {lean: true}});
因此,当我键入 searchKeyWord 时,它只会返回包含 book.name 和 book.description 的书籍。我希望它也返回 book.type.name
例如,当我键入“a”时,我希望函数返回 book.name.include(a) + book.description.include(a) 和 book.type.name.include(a)
我明白,因为我首先将查询放入列表中,然后使用 Types Schema 填充,但是有什么方法可以先填充,然后在 db 查询级别(不是 nodejs)过滤数据
非常感谢!
编辑!
我遵循了 ISAE 的答案,它奏效了。我想问我如何改变查询条件。我试过了:
var query = `$or: [
{"name": {"$regex": req.query.search}},
{"description": {"$regex": req.query.search}},
{"tenant": {"$regex": tenantIds}}
]`
Books.find({query}).lean();
但它不起作用。谢谢!
【问题讨论】:
标签: mongodb mongoose mongoose-populate