Задать вопрос
@Qu1eeeOJ

Как сформировать запрос к MongoDB с поиском по int-полям?

Здравствуйте, ситуация следующая:

Был установлен пакет jenssegers/mongodb, недели 3 назад вышло обновление и поддержка для laravel 10, по этой причине пришлось мигрировать.
Чего только не пробовал, но так и не получается понять в чём проблема.
P.s если получить запрос, который генерирует ORM и отправить в mong'y, то запрос корректный.

Запрос:
Item::query()->select('account_id', 'item_id', 'offer_id', 'fbo_sku', 'fbs_sku', 'barcodes')
            ->orWhere('item_id', ''like,  "%{$searchable}%")
            ->orWhere('name', 'like', "%{$searchable}%")
            ->orWhereRaw(['$where' => "/^{$searchable}.*/.test(this.item_id)"])
            ->orWhereRaw(['$where' => "/^{$searchable}.*/.test(this.fbo_sku)"])
            ->orWhereRaw(['$where' => "/^{$searchable}.*/.test(this.fbs_sku)"])
            ->get();


Ошибка: MongoDB\Driver\Exception\CommandException
Текст ошибки: $where is not allowed in this context
Результат документа:
['ok' => 0.0, 'errmsg' => '$where is not allowed in this context', 'code' => 2, 'codeName' => 'BadValue']


Также приведу запрос, который возвращает ORM:
items.find({"$or":[{"item_id":{"$regex":"^.*12435.*$","$options":"i"}},{"name":{"$regex":"^.*12435.*$","$options":"i"}},{"offer_id":{"$regex":"^.*12435.*$","$options":"i"}},{"barcodes":{"$regex":"^.*12435.*$","$options":"i"}},{"$where":"\/^12435.*\/.test(this.item_id)"},{"$where":"\/^12435.*\/.test(this.fbo_sku)"},{"$where":"\/^12435.*\/.test(this.fbs_sku)"}]},{"limit":50,"projection":{"account_id":true,"item_id":true,"offer_id":true,"fbo_sku":true,"fbs_sku":true,"barcodes":true,"primary_image":true,"old_price":true,"marketing_price":true,"price":true,"status":true,"name":true},"typeMap":{"root":"array","document":"array"}})
  • Вопрос задан
  • 77 просмотров
Подписаться 1 Простой 5 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы