Mongodb 使用NestJS和Mongo获取相关数据

Mongodb 使用NestJS和Mongo获取相关数据,mongodb,mongoose,nestjs,mongoose-schema,q,Mongodb,Mongoose,Nestjs,Mongoose Schema,Q,我是NestJS和Mongo的新手。我正在定义方案,并试图获取相关集合的数据。我遵循了中的示例,但我不明白为什么不在我的代码中工作。我在StackOverflow中看到了另一个例子,但没有成功 我得到的是: [ { "songs": [], "_id": "6066d3783b1f96201a62372a", "name": "The best alb

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

我得到的是:

[
    {
        "songs": [],
        "_id": "6066d3783b1f96201a62372a",
        "name": "The best album",
        "year": 2021,
        "image": "cover"
    }
]
我想要得到的是:

[
    {
        "songs": [
            {
                "_id": "6066d3e13b1f96201a62372b",
                "name": "Song1"
            },
            {
                "_id": "6066d46a3b1f96201a62372c",
                "name": "Song2"
            },
        ],
        "_id": "6066d3783b1f96201a62372a",
        "name": "The best album",
        "year": 2021,
        "image": "cover"
    }
]
相册文档

{
  "_id": {
    "$oid": "6066d3783b1f96201a62372a"
  },
  "name": "The best album",
  "year": {
    "$numberInt": "2021"
  },
  "image": "cover"
}
{
  "_id": {
    "$oid": "6066d3e13b1f96201a62372b"
  },
  "name": "Song1",
  "album": {
    "$oid": "6066d3783b1f96201a62372a"
  }
},
{
  "_id": {
    "$oid": "6066d46a3b1f96201a62372c"
  },
  "name": "Song2",
  "album": {
    "$oid": "6066d3783b1f96201a62372a"
  }
}
歌曲文档

{
  "_id": {
    "$oid": "6066d3783b1f96201a62372a"
  },
  "name": "The best album",
  "year": {
    "$numberInt": "2021"
  },
  "image": "cover"
}
{
  "_id": {
    "$oid": "6066d3e13b1f96201a62372b"
  },
  "name": "Song1",
  "album": {
    "$oid": "6066d3783b1f96201a62372a"
  }
},
{
  "_id": {
    "$oid": "6066d46a3b1f96201a62372c"
  },
  "name": "Song2",
  "album": {
    "$oid": "6066d3783b1f96201a62372a"
  }
}
相册模块.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 {}
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);
  }
}
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();
  }
}

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);

import { Prop, Schema, 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);
相册.controller.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 {}
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);
  }
}
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();
  }
}

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);

import { Prop, Schema, 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);
相册.服务.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 {}
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);
  }
}
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();
  }
}

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);

import { Prop, Schema, 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);
song.schema.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 {}
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);
  }
}
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();
  }
}

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);

import { Prop, Schema, 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);
先谢谢你