【发布时间】:2015-08-28 14:01:04
【问题描述】:
我正在尝试使用 mongoose 为某个模式添加索引以进行文本搜索。如果我向单个字段添加文本索引,它可以正常工作,也可以使用复合索引。例如,这里提供的答案很棒:
Full text search with weight in mongoose
但是,我正在尝试向引用其他模式的字段添加索引。例如,我的模型如下所示:
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 确实 不 执行 joins”。这是在互联网上搜索的最简单的术语。然而,人们每天都在问这个问题。您还应该了解 mongoose
.populate()不是加入。这只是为了看起来像的附加查询,它是对基本 API 的连接。 -
好吧,也许你可以向我解释一下我应该确切地搜索什么。因为我不知道实现我想要做的事情的正确方法。
标签: javascript node.js mongodb indexing mongoose