2016-08-07 18 views
9

Mam następujący schemat:Mongoose indeks zagnieżdżony tekst na polu schematu

const Schema = ({ 
    metadata: { 
    title: String, 
    ... 
    }, 
    ... 

}); 

i szukam, aby utworzyć indeks tekstu na metadata.title. Mogę utworzyć indeks tekstowy z powodzeniem na każdej własności pierwszego poziomu, ale mam problem z zagnieżdżonym tytułem.

Próbowałem poniższy kod, bez skutku. Czy moja składnia jest nieprawidłowa? Nie miałem szczęścia z docs ...

Schema.index({ 'metadata.title': 'text' }); 

Wyszukany:

Schema 
    .find(
    { $text : { $search : req.params.query } }, 
    { score : { $meta: "textScore" } }) 
+0

Rozpoczęła się nagroda- ale okazało się, że obecna odpowiedź rozwiązuje problem. Tam nagradza nagrodę. –

+1

Twoja pierwotna próba 'Schema.index ({'metadata.title': 'text'});' jest właściwym sposobem na zrobienie tego i działa dobrze, kiedy go wypróbuję. Aktualnie zaakceptowana odpowiedź utworzy tradycyjny indeks, a nie indeks tekstowy. Używanie schematu 'Schema' dla twojego schematu (i twojego modelu) jest nieco mylące, ponieważ naprawdę powinieneś zachować nazwę tego identyfikatora jako konstruktora' Schema'. – JohnnyHK

+0

Taaaaaaaaaaaaaaaaaaaaaaaaaaaa w mój kod, użyłem Schema tutaj jako placeholder ... przepraszam. I tak, moja oryginalna próba działa tak jak powiedziałeś ... komu nagrodzę nagrodę? –

Odpowiedz

2

Okazuje się, co miałem pierwotnie była prawidłowa, jak podkreślił @JohnnyHK. Musiałem mieć jakiś inny błąd, który spowodował, że indeks nie zadziałał ...

0

const Schema = ({ 
 
    metadata: { 
 
    title: { 
 
     type: String, 
 
     index: true 
 
     } 
 
    ... 
 
    }, 
 
    ... 
 

 
});

+0

Hm ... mangusta wydaje się rzucać błąd, gdy robię to. 'TypeError: Undefined type undefined at metadata.index' –

+1

Przepraszamy. Naprawiono moją odpowiedź. –

+0

Hm. Nadal nie działa, przynajmniej nie w moich poszukiwaniach. Dodałem, jak szukam, czy możesz upewnić się, że nadal pasuje? –