Mongodb 使用NestJS和Mongo获取相关数据
我是NestJS和Mongo的新手。我正在定义方案,并试图获取相关集合的数据。我遵循了中的示例,但我不明白为什么不在我的代码中工作。我在StackOverflow中看到了另一个例子,但没有成功 我得到的是: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
[
{
"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);
先谢谢你