Я пытаюсь добавить индекс к определенной схеме с помощью mongoose для поиска текста. Если я добавлю текстовый индекс в отдельные поля, он отлично работает, а также с составными индексами, это нормально. Например, ответ предоставляется здесь велик:Создайте текстовый индекс в схеме MongoDB, который ссылается на другую схему
Full text search with weight in mongoose
Однако я пытаюсь добавить индекс к полям, которые являются ссылками на другую Schemas. Например моя модель выглядит следующим образом:
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);
}
}
);
}
Есть ли у кого-нибудь предложения по добавлению tex t для полей «издатель» и «автор», я использую метод «заполнить» mongodb, чтобы вытащить данные для этих схем.
Почему так трудно понять людям? «MongoDB делает ** не ** выполняет ** соединение **». Это самый простой термин для поиска в Интернете. Но люди спрашивают об этом каждый день. Вы также должны понимать, что mongoose '.populate()' ** не является соединением **. Это просто дополнительный запрос (ы), сделанный так, чтобы * выглядел как *, это соединение с базовым API. –
Ну, может быть, вы могли бы объяснить мне, что я должен точно искать. Поскольку я не знаю, как правильно достичь того, что я пытаюсь сделать. – StujayH