Tengo una colección de usuarios en la base de datos y quiero recuperar un usuario con un nombre de usuario específico. He escrito este método pero está devolviendo a todos los usuarios.
findByUsername(username: string) { return this.userModel.find({ 'username' : username}) }¿Por qué esta consulta no funciona? Controlador
@Get('find/:username') getUserById(@Param("username") username : string) : any { console.log(username); return this.usersService.findByUsername(username); }Esta es mi entidad de usuario
importar {Esquema, SchemaFactory} desde "@nestjs/mongoose"; importar {ApiProperty} desde "@nestjs/swagger";
tipo de exportación UserDocument = Usuario y documento;
@Schema() export class User { @ApiProperty() id: string; @ApiProperty() username: string; @ApiProperty() email : string @ApiProperty() password: string; } export const UserSchema = SchemaFactory.createForClass(User);este es el servicio
import { Injectable } from "@nestjs/common"; import { InjectModel } from "@nestjs/mongoose"; import { Model } from "mongoose"; import { use } from "passport"; import {User,UserDocument} from '../users/entities/user.entity' // This should be a real class/interface representing a user entity @Injectable() export class UsersService { constructor( @InjectModel(User.name) private readonly userModel : Model<User> ) {} findById(userId: string) { } findByUsername(username: string) { return this.userModel.find({"username": username}).exec(); }Prueba esto:
findByUsername(username: string) { return this.userModel.find({username: username}).exec(); }o versión simplificada:
findByUsername(username: string) { return this.userModel.find({username}).exec(); } Brevemente, la causa es el campo 'nombre de usuario' escrito con comillas y falta el método .exec() al final de la cadena.
Además, el esquema debe prepararse para Mongoose decorando los campos con el decorador @Prop():
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose'; @Schema() export class User { @ApiProperty() @Prop() id: string; @ApiProperty() @Prop() username: string; @ApiProperty() @Prop() email : string @ApiProperty() @Prop() password: string; } export const UserSchema = SchemaFactory.createForClass(User);Puede usar el método findOne en Mongoose:
findByUsername(username: string) { return this.userModel.findOne({ username }) }