我将这两个集合定义如下
let BookSchema = new mongoose.Schema({
title: String,
author: {
type: mongoose.Object.Types.ObjectId,
ref: "author"
}
})
let BookModel = mongoose.model("Books", BookSchema)
和另一个模式
let AuthorSchema = new mongoose.Schema({
name: String,
})
let AuthorModel = mongoose.model("author", AuthorSchema)
我想使用查询搜索BookModel,以查找书名或作者姓名(注意:不是作者ID,而是姓名(包含查询的任何书籍。
我定义了以下代码
let query = "";
BooksModel.find({title: {$regex: query, $options:'i'}})
这搜索标题,我如何也让它搜索id在BooksModel中的艺术家的名字包括查询?
使用MongoDB不能在一个查询中做到这一点,需要有两个单独的查询。
const queryRegexFilter = {
$regex: query,
$options: 'i'
};
const authors = await AuthorModel.find({
name: queryRegexFilter
}).select('_id');
const authorsIds = authors.map(author => author._id);
const books = await BookModel.find({
$or: [
{ title: queryRegexFilter },
{ authorId: { $in: authorsIds } }
]
});
doStuffWithBooks(books);