2015-06-12 2 views
3

Я пытаюсь добавить индекс к определенной схеме с помощью 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, чтобы вытащить данные для этих схем.

+1

Почему так трудно понять людям? «MongoDB делает ** не ** выполняет ** соединение **». Это самый простой термин для поиска в Интернете. Но люди спрашивают об этом каждый день. Вы также должны понимать, что mongoose '.populate()' ** не является соединением **. Это просто дополнительный запрос (ы), сделанный так, чтобы * выглядел как *, это соединение с базовым API. –

+3

Ну, может быть, вы могли бы объяснить мне, что я должен точно искать. Поскольку я не знаю, как правильно достичь того, что я пытаюсь сделать. – StujayH

ответ

3

Я думаю, что вы ищете возможность объединения таблиц данных и выполнения запроса на сумму этих данных. Для этого вам нужна реляционная база данных, для которой MongoDB нет.

Поэтому я рекомендую вам изменить свой подход в том, как вы хотели бы выполнить предварительный поиск, например. найдите ключевое слово как в авторе, так и в заголовке, вместо того, чтобы одновременно искать весь набор данных.