使用 NestJS 和 Mongo 获取相关数据

问题描述

我是 nestJS 和 Mongo 的新手。我正在定义方案,并试图获取相关集合的数据。我遵循了 here 中的示例,但我不明白为什么在我的代码中不起作用。我在 StackOverflow 中看到了另一个例子,但没有成功。

我得到了什么:

[
    {
        "songs": [],"_id": "6066d3783b1f96201a62372a","name": "The best album","year": 2021,"image": "cover"
    }
]

我想得到的:

[
    {
        "songs": [
            {
                "_id": "6066d3e13b1f96201a62372b","name": "Song1"
            },{
                "_id": "6066d46a3b1f96201a62372c","name": "Song2"
            },],"image": "cover"
    }
]

相册文档

{
  "_id": {
    "$oid": "6066d3783b1f96201a62372a"
  },"year": {
    "$numberInt": "2021"
  },"image": "cover"
}

歌曲文档

{
  "_id": {
    "$oid": "6066d3e13b1f96201a62372b"
  },"name": "Song1","album": {
    "$oid": "6066d3783b1f96201a62372a"
  }
},{
  "_id": {
    "$oid": "6066d46a3b1f96201a62372c"
  },"name": "Song2","album": {
    "$oid": "6066d3783b1f96201a62372a"
  }
}

album.module.ts

import { Module } from '@nestjs/common';
import { AlbumsController } from './albums.controller';
import { AlbumsService } from './albums.service';
import { MongooseModule } from '@nestjs/mongoose';
import { Album,AlbumSchema } from './schemas/album.schema';

@Module({
  imports: [MongooseModule.forFeature([{ name: Album.name,schema: AlbumSchema }])],controllers: [AlbumsController],providers: [AlbumsService],})
export class AlbumModule {}

albums.controller.ts

import { Controller,Get,HttpStatus,Res } from '@nestjs/common';
import { AlbumsService } from './albums.service';

@Controller('albums')
export class AlbumsController {
  constructor(private readonly albumsService: AlbumsService) {}

  @Get()
  async getAlbums(@Res() res) {
    const albums = await this.albumsService.getAlbums();
    return res.status(HttpStatus.OK).json(albums);
  }
}

albums.service.ts

import { Model } from 'mongoose';
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Album,AlbumDocument } from './schemas/album.schema';

@Injectable()
export class AlbumsService {
  constructor(@InjectModel(Album.name) private albumModel: Model<AlbumDocument>) {}

  async getAlbums(): Promise<Album[]> {
    return this.albumModel.find().populate('songs').exec();
  }
}

album.schema.ts

import { Prop,Schema,SchemaFactory } from '@nestjs/mongoose';
import { Song } from './song.schema';
import { Document,Types } from 'mongoose';
import * as mongoose from 'mongoose';

export type AlbumDocument = Album & Document;

@Schema()
export class Album {
  @Prop()
  name: string;

  @Prop()
  year: number;

  @Prop()
  image: string;

  @Prop([{ type: mongoose.Schema.Types.ObjectId,ref: 'Song' }])
  songs: Song[];
}

export const AlbumSchema = SchemaFactory.createForClass(Album);

song.schema.ts

import { Prop,SchemaFactory } from '@nestjs/mongoose';
import { Album } from './album.schema';
import { Document } from 'mongoose';
import * as mongoose from 'mongoose';

export type SongDocument = Song & Document;

@Schema()
export class Song {
  @Prop()
  name: string;

  @Prop({ type: mongoose.Schema.Types.ObjectId,ref: 'Album' })
  album: Album;
}

export const SongSchema = SchemaFactory.createForClass(Song);

提前致谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)