Всем привет. Подскажите, пожалуйста, почему не работает полнотекстовый поиск в MongoDB по нескольким полям? Где я ошибся в коде?
У меня есть три документа.
{
"_id": {
"$oid": "5d7f70d46b647c1a74d9b8aa"
},
"firstName": "user",
"lastName": "one",
"phoneNumber": "+7 (111) 111-11-11",
"city": "Москва",
"userId": {
"$oid": "5d5ea4596886b1107c2be849"
},
"__v": 0
}
{
"_id": {
"$oid": "5d7f70d46b647c1a74d9b8aa"
},
"firstName": "user",
"lastName": "two",
"phoneNumber": "+7 (222) 222-22-22",
"city": "Сочи",
"userId": {
"$oid": "5d5ea4596886b1107c2be849"
},
"__v": 0
}
{
"_id": {
"$oid": "5d7f70d46b647c1a74d9b8aa"
},
"firstName": "user",
"lastName": "two",
"phoneNumber": "+7 (333) 333-33-33",
"city": "Москва",
"userId": {
"$oid": "5d5ea4596886b1107c2be849"
},
"__v": 0
}
На вход у меня приходит, например такая строка:
'ne чи'
Ожидается результат поиска по всем документам и следующим полям в этих документах:
firstName
lastName
city
Результат:
{
"_id": {
"$oid": "5d7f70d46b647c1a74d9b8aa"
},
"firstName": "user",
"lastName": "one",
"phoneNumber": "+7 (111) 111-11-11",
"city": "Москва",
"userId": {
"$oid": "5d5ea4596886b1107c2be849"
},
"__v": 0
}
{
"_id": {
"$oid": "5d7f70d46b647c1a74d9b8aa"
},
"firstName": "user",
"lastName": "two",
"phoneNumber": "+7 (222) 222-22-22",
"city": "Сочи",
"userId": {
"$oid": "5d5ea4596886b1107c2be849"
},
"__v": 0
}
Модель выглядит следующим образом:
const mongoose = require('mongoose')
const bookSchema = new mongoose.Schema(
{
firstName: {
type: String,
required: true
},
lastName: {
type: String,
required: true
},
city: {
type: String,
required: true
},
phoneNumber: {
type: String,
required: true
},
userId: {
type: mongoose.Schema.Types.ObjectId,
ref: 'User'
}
}
)
// Define our indexes
bookSchema.index({
firstName: 'text',
lastName: 'text',
city: 'text'
})
module.exports = mongoose.model('Book', bookSchema)
контроллер:
exports.searchBook = async (req, res, next) => {
const term = 'ne чи'
console.log(term)
const books = await Book.find({
$text: {
$search: term
}
}, {
score: { $meta: 'textScore' }
})
.sort({
score: { $meta: 'textScore' }
})
console.log('books', books)
}
В результате приходит пустой массив. Если даже передать, например: 'Сочи', то так же вернется пустая строка.
Что я делаю не так.
Источник на который я ссылался?
https://stackoverflow.com/questions/24714166/full-...