MongoDB / Mon goose - текстовый поиск внутри массива - PullRequest
2 голосов
/ 03 апреля 2020

Мне нужно выполнить текстовый поиск внутри элементов массива. Возможно ли это?

Использование Mon goose в Node.js и моя userSchema выглядит так:

{
 _id: "123456",
 name: "Lucas"
 items: [
  { title: "Shoes", description: "Very nice shoes"}, 
  { title: "Pants", description: "Great pants!"}
 ]
}

Я пытался добавить индексы следующим образом:

userSchema.index({ "items.title": "text", "items.description": "text" });

Но следующий запрос ничего не возвращает:

User.find({  $text: { $search: "Shoes" }});

1 Ответ

1 голос
/ 03 апреля 2020

mon goose не является решением для управления индексами. Поэтому не полагайтесь на mon goose для создания индексов. Они даже указывают это в своих документах по адресу faq .

. В производственной среде вы должны создавать свои индексы, используя оболочку MongoDB, а не полагаться на mon goose, чтобы сделать это. для вас.

Так что все, что вам нужно сделать, это создать текстовый индекс в оболочке mongodb. Если название коллекции отличается от users, вам необходимо изменить также ниже.

db.users.createIndex(
    {
        "items.title": "text",
        "items.description": "text",
    }
)
...