【问题标题】:Nestjs Mongodb always return empty arrayNestjs Mongodb 总是返回空数组
【发布时间】:2021-12-10 14:16:26
【问题描述】:

我正在尝试创建一个连接到 mongodb 的简单 nestjs 项目。我关注了官方documentation of nestjs,但使用“用户”集合连接到我自己的数据库。 当我尝试调用端点 findAll 用户时,结果始终为空,即使 db 包含记录。

知道是什么导致了这个问题吗?

// user.schema.ts
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';

export type UserDocument = User & Document;

export class Credential {
  @Prop()
  username: string;

  @Prop()
  password: string;
}

export class NameDetails {
  @Prop()
  firstName: string;

  @Prop()
  lastName: string;
}

export class ContactDetails {
  @Prop()
  email: string;

  @Prop()
  phoneNumber: string;
}

@Schema()
export class User extends Document {
  @Prop()
  _id: string;

  @Prop()
  credential: Credential;

  @Prop()
  nameDetails: NameDetails;

  @Prop()
  contactDetails: ContactDetails;

}

export const UserSchema = SchemaFactory.createForClass(User);
// users.module.ts

import { Module } from '@nestjs/common';
import { UsersService } from './users.service';
import { UsersController } from './users.controller';
import { MongooseModule } from '@nestjs/mongoose';
import { User } from './entities/user.entity';
import { UserSchema } from 'src/schemas/user.schema';

@Module({
  imports: [MongooseModule.forFeature([{ name: User.name, schema: UserSchema }])],
  controllers: [UsersController],
  providers: [UsersService]
})
export class UsersModule {}
// users.service.ts
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Model } from 'mongoose';
import { User, UserDocument } from 'src/schemas/user.schema';

@Injectable()
export class UsersService {
  constructor(@InjectModel(User.name) private userModel: Model<UserDocument>) {}

  async findAll(): Promise<User[]> {
    return await this.userModel.find().exec();
  }

}


【问题讨论】:

    标签: node.js mongodb mongoose nestjs


    【解决方案1】:

    在我的情况下,问题是我没有在 app.module.ts 中提供数据库名称,我只将 URI 传递给了 mongodb 集群(不确定命名,如果我错了,请纠正我),并且每次运行服务器时,它都会在集群上创建一个“测试”数据库(带有空集合,因此是空数组),您可以在 MongoDB Compass 中看到它。 nestJS 文档也不提供数据库名称。

    【讨论】:

      【解决方案2】:

      如果您的架构类名称是User,那么实际的集合名称应该是users,而不是user。 Mongoose 会在降低字符后在类名中附加一个 's'。

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 1970-01-01
      • 2019-12-02
      • 2020-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-22
      • 1970-01-01
      • 2020-07-01
      相关资源
      最近更新 更多