首页 > 解决方案 > Nestjs Mongodb 总是返回空数组

问题描述

我正在尝试创建一个连接到 mongodb 的简单 nestjs 项目。我遵循了nestjs 的官方文档,但使用“用户”集合连接到我自己的数据库。当我尝试调用端点来查找所有用户时,结果始终为空,即使数据库包含记录。

对导致问题的原因有任何想法吗?

// 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.jsmongodbmongoosenestjs

解决方案


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


推荐阅读