在字段为objectId但引用另一个集合的集合中查找文档



我将这两个集合定义如下

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

相关内容

  • 没有找到相关文章