MongoDB / Mon goose - возвращает только элементы массива, соответствующие $ text - PullRequest
1 голос
/ 03 апреля 2020

У меня есть следующий объект:

user: {
 _id: "xxx",
 name: "Lucas",
 items: [
  { name: "shoes", description: "nice shoes" },
  { name: "pants", description: "old pants" },
 ],
 places: [
  {name: "my house", loc: { type: "Point", coordinates: [-27, -43] }}
 ]
}

Мне нужно выполнить поиск текста ($ text), который возвращает только элементы. Например:

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

Это работает! Но он также возвращает штаны, поскольку возвращает пользователя, а не только элемент массива. И это проблема, мне нужно разбить на элементы в моей базе данных. Поэтому мне нужно возвращать только элементы массива, соответствующие поиску $ text. Я знаю, что если бы элементы были самой коллекцией, они бы работали, но в моем случае они мне нужны внутри пользователя, потому что я комбинирую $ text для элементов и $ geoWithin для мест.

Итак, как мне вернуть пользователя хранить только те предметы, которые соответствуют моему текстовому поиску?

1 Ответ

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

Вы пытались использовать регулярное выражение Чтобы включить регулярное выражение в разделенный запятыми список условий запроса для поля, используйте оператор $ regex. Например:

{ name: { $regex: /acme.*corp/i, $nin: [ 'acmeblahcorp' ] } }

или что-то вроде

db.users.find({"name": /^m/})

https://docs.mongodb.com/manual/reference/operator/query/regex/

...