在引用另一个模式的MongoDB模式上创建一个文本索引

Create a text index on MongoDB schema which references another schema

本文关键字:模式 一个 文本 索引 创建 另一个 引用 MongoDB      更新时间:2023-09-26

我正在尝试使用猫鼬向某个模式添加索引以进行文本搜索。 如果我将文本索引添加到单个字段,它可以正常工作,对于复合索引也可以。例如,这里提供的答案很棒:

全文搜索与猫鼬的重量

但是,我正在尝试向引用其他架构的字段添加索引。例如,我的模型如下所示:

    var Book = new Schema({
        "title": String,
        "createdAt": Date,
        "publisher": {
             "type": Schema.ObjectId,
             "ref": "Publisher"
        },
        "author": {
             "type": Schema.ObjectId,
             "ref": "Author"
        },
        "isbn": String
    });

因此,当您执行如下所述的搜索查询时,类似于以下索引的操作不起作用:

索引:

 Book.index({"title": "text", "publisher.name": "text", "author.firstName": "text"});

搜索查询:

function searchBooks(req, res) {
    var query = req.query.searchQuery;
    Book.find({ $text: { $search: query } })
        .populate('author publisher')
        .limit(25)
        .exec(function(err, books) {
            if (err) {
                res.json(err);
            } else {
                res.json(books);
            }
        }
    );
}

有没有人对如何为"出版商"和"作者"字段添加文本索引有任何建议,我正在使用"填充"mongodb 方法来提取这些架构的数据。

我认为

,您正在寻找的是连接数据表并针对该数据的总和执行查询的能力。这是你需要一个关系数据库的东西,而MongoDB不是。

因此,我建议您改变搜索方式的方法,例如,在作者和标题中搜索关键字,而不是尝试同时搜索整个数据集。