2017-01-10 3 views
0

Я не уверен, что у меня есть правильный словарь, чтобы описать ошибку, с которой я столкнулся со мной.Mongo text index не заканчивается, когда ничего не возвращается

Вот общая схема для документов в моей коллекции

{ 
    _id: ObjectId(), 
    name: String, 
    business: String, 
    address: { 
     search_type: Character, 
     address: String, 
     city: String, 
     state: String, 
     zip: Number 
    } 
} 

Я хотел искать на основе address.search_type поэтому я создал текстовый индекс для этого поля в моей коллекции.

{ 
    v: 1, 
    key: { _fts: 'text', _ftsx: 1 }, 
    name: 'address.search_type_text', 
    ns: 'admin.customer', 
    default_language: 'none', 
    weights: { 'address.search_type': 1 }, 
    language_override: 'language', 
    textIndexVersion: 3 
} 

Теперь я знаю, что мои данные должны действительно только C, G, T или как тип поиска, и когда я запускаю найти запрос на эту коллекцию с одним из поддерживаемых search_types запрос выполняется только штрафом.

db.collection('blah').find({'address.search_type':'C'}).limit(10).toArray(function(err, result){ 
    if(err) console.log(err); 
    else console.log(result[0]); 
    db.close(); 
}); 

Но когда я запускаю этот запрос с address.search_type, которая должна возвращать 0 документы мой запрос или никогда не заканчивает или времени ожидания.

db.collection('blah').find({'address.search_type':'Z'}).limit(10).toArray(function(err, result){ 
    if(err) console.log(err); 
    else console.log(result[0]); 
    db.close(); 
}); 

Почему мой запрос не завершит выполнение/тайм-аут, если предполагается, что у него есть 0 документов, но отлично работает, когда он может найти документы?

ответ

0

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

Это, вероятно, неловкая ошибка, но эй я только начал изучать mongodb, так что бы ни было.

В любом случае, я понял, что все, что мне нужно было сделать, это создать единый индекс поля на address.search_type.

{ v: 1, 
    key: { 'address.Search_Type': 1 }, 
    name: 'address.Search_Type_1', 
    ns: 'admin.customer' 
} 

Я все еще не совсем уверен, почему текстовый индекс не работает, так как я поставил язык на нет, но это имеет смысл, что все, что мне нужно будет это один индекс.

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

Смежные вопросы