Javascript 在引用其他模式的MongoDB模式上创建文本索引
我正试图使用mongoose为文本搜索向特定模式添加索引。如果我将文本索引添加到各个字段中,效果很好,使用复合索引也可以。例如,这里提供的答案很好: 但是,我正在尝试向引用其他模式的字段添加索引。例如,我的模型如下所示:Javascript 在引用其他模式的MongoDB模式上创建文本索引,javascript,node.js,mongodb,indexing,mongoose,Javascript,Node.js,Mongodb,Indexing,Mongoose,我正试图使用mongoose为文本搜索向特定模式添加索引。如果我将文本索引添加到各个字段中,效果很好,使用复合索引也可以。例如,这里提供的答案很好: 但是,我正在尝试向引用其他模式的字段添加索引。例如,我的模型如下所示: var Book = new Schema({ "title": String, "createdAt": Date, "publisher": { "type": Schema.ObjectI
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);
}
}
);
}
如果有人对如何为“publisher”和“author”字段添加文本索引有任何建议,我将使用“populate”mongodb方法为这些模式提取数据 我认为,您需要的是连接数据表并对数据总和执行查询的能力。这需要一个关系数据库,而MongoDB不是
因此,我建议您改变搜索方式,例如在作者和标题中搜索关键词,而不是同时搜索整个数据集。为什么人们很难理解这一点?“MongoDB不执行连接”。这是在互联网上搜索最简单的词。然而,人们每天都在问这个问题。您还应该了解mongoose
.populate()
不是联接。这只是额外的查询,看起来像是基本API的连接。也许你可以向我解释一下我到底要搜索什么。因为我不知道怎样才能达到我想要做的事情。