Я хочу получить данные конкретного человека из mongodb на основе значений имени пользователя и пароля, но я получил все данные db вместо конкретного человека, которого я передал в имени пользователя и пароле.

Вот код DTO:

import {IsString, IsInt,IsEmail,IsNotEmpty, IsNumberString} from 'class-validator';

export class LoginDto {
    @IsEmail()
    username: string;

    @IsNumberString()
    password: string;
}

Вот код услуги:

async loginsys(credentials: LoginDto): Promise<any> {
    const cred = await this.student.find({ credentials }).exec();
    return cred;
}

Вот код контроллера:

@Post('login')
log(@Body('credentials') credentials: LoginDto): any {
    return this.crudservice.loginsys(credentials);
}
1
sahil 15 Апр 2020 в 17:44
Можете ли вы привести пример результата базы данных и ожидаемого результата, пожалуйста?
 – 
RalphJS
15 Апр 2020 в 21:37

1 ответ

Если вы хотите получить только один объект, вы можете использовать findOne вместо find:

return this.student.findOne(credentials)

find должен работать, если вы передадите свой запрос where:

find({where: credentials})`

exec() не требуется.

1
Kim Kern 16 Апр 2020 в 20:26
Все еще не работает, я получил все записи в качестве вывода. Но мне нужны только эти конкретные данные в соответствии с моим именем пользователя и паролем
 – 
sahil
16 Апр 2020 в 18:47
Странно, findOne возвращает только одну сущность. Как выглядит ваша схема/модель?
 – 
Kim Kern
16 Апр 2020 в 18:50
FindOne возвращает только самое первое значение коллекции
 – 
sahil
16 Апр 2020 в 18:54
Вместо этого вы должны использовать findOne(credentials), см. мое редактирование. Проблема в том, что вы на самом деле запрашиваете поле credentials, потому что {credentials} является сокращением для {credentials: credentials}.
 – 
Kim Kern
16 Апр 2020 в 20:28