Typeorm, MongoDB и оператор where

#node.js #mongodb #express #nestjs #typeorm

#node.js #mongodb #выразить #nestjs #typeorm

Вопрос:

[TypeORM с типом MongoDB]. Здравствуйте, у меня есть база данных с пользователями, где у каждого пользователя есть адрес электронной почты, теперь я хочу найти всех пользователей, для которых электронная почта начинается, например, с «test», а возвращаемое значение должно быть User[{email: ‘test1’}, {email: ‘test2’}, …] но я невозможность извлечь эти объекты здесь, как я выполняю свой запрос:

  const users = await this.usersRepository.find({
    where: `"email" LIKE 'test%'`,
 });
 

Но этот код возвращает всю коллекцию пользователей. Я также пробую это с:

Я также пробую это с:

     const users = await this.usersRepository.find({
        where: {
            email: Like('test')
        }
    });
 

Этот возвращает пустой массив []

Даже если я попытаюсь с точным совпадением, например, как (‘test21@abv.bg ‘), по-прежнему возвращает пустой массив

Как я могу добиться, чтобы все пользователи, для которых электронное письмо начинается с «test», заранее благодарны!

Ответ №1:

Для MongoDB используйте регулярное выражение

 const users = await this.usersRepository.find({
    where: {
        email: new RegExp(`^${userEmail}`);
    }
});
 

Комментарии:

1. возвращает пустой массив

2. @AndonMitev это кажется странным. Попробуйте запустить необработанный SQL SELECT * ИЗ «пользователи», ГДЕ «электронная почта» ПОХОЖА НА «test%», чтобы дважды проверить, нет ли проблем с вашими данными

3. Я бы попробовал указать ваши условия непосредственно в качестве аргумента метода find, например, find({ email: Like(‘test%’) }); но я полагаю, это не будет иметь никакого значения. Ссылка: github.com/typeorm/typeorm/blob/master/docs /…

4. Да, нет никакой разницы, я использую MongoDB с TypeORM

5. @AndonMitev это все изменило. В вашем случае вам нужно использовать регулярное выражение { email: /^test/ }