Немного новичок в Node / Nest JS, но есть работающее приложение, использующее Node, Nest, MongoDB / Mon goose.
Я определил схемы mon goose для связи с MongoDB и интерфейсы, которые реализуют документ Mon goose.
Я действительно не вижу никакой связи между определениями схемы, данными в MongoDB или интерфейсами, возвращаемыми контроллерами. Если данные находятся в MongoDB, они возвращаются контроллером в HTTP-запросе независимо от того, определены ли они в схеме или интерфейсе.
Аналогичным образом, если я добавлю в интерфейс, схему или оба свойства, которые НЕ существуют в MongoDB, ничто не будет возвращено в API (как нулевое значение).
Не знаю почему.
ИНТЕРФЕЙС:
import { Document } from 'mongoose';
import { Division } from './division.interface';
export interface Branch extends Document {
readonly branchId: number;
readonly name: string;
readonly type: string;
readonly mainBranch: boolean;
readonly lastUpdated: Date;
readonly division: Division;
readonly test: string; // doesnt exist in data, nothing returned in API call
}
СХЕМА:
import * as mongoose from 'mongoose';
import { DivisionSchema } from './division.schema';
export const BranchSchema = new mongoose.Schema({
branchId: Number,
name: String,
type: String,
mainBranch: Boolean,
lastUpdated: Date,
division: DivisionSchema,
test: String // doesnt exist in data, nothing returned in API call
});
КОНТРОЛЛЕР:
...
@Get('branches')
async getAllBranches(): Promise<Branch[]> {
try {
return this.branchesService.getAllBranches();
}
catch (e) {
throw new HttpException(e.toString(), HttpStatus.INTERNAL_SERVER_ERROR);
}
}
СЕРВИС :
import { Model } from 'mongoose';
import { Injectable } from '@nestjs/common';
import { InjectModel } from '@nestjs/mongoose';
import { Branch } from 'src/interfaces/branch.interface';
@Injectable()
export class BranchesService {
constructor(@InjectModel('Branch') private readonly model: Model<Branch>) { }
async getAllBranches(): Promise<Branch[]> {
const result = await this.model.find().exec();
return result;
}
...