Nestjs Mongodb 总是返回空数组

Posted

技术标签:

【中文标题】Nestjs Mongodb 总是返回空数组【英文标题】:Nestjs Mongodb always return empty array 【发布时间】: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();
  




【问题讨论】:

【参考方案1】:

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

【讨论】:

【参考方案2】:

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

【讨论】:

您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于Nestjs Mongodb 总是返回空数组的主要内容,如果未能解决你的问题,请参考以下文章

Mongodb $lookup 返回空数组

当graphQL的查询从mongodb返回空数据时,你应该检查啥?

MongoDB $lookup 返回空数组[重复]

MongoDB $lookup 返回空数组[重复]

Mongodb.find返回空数组[重复]

Mongodb.find返回空数组[重复]