Mongoose - 使用打字稿对象的最佳实践

时间:2017-04-11 17:31:50

标签: node.js mongodb typescript

我想在代码和DB对象中使用Sperate逻辑来对象。 所有想法都是将完整的逻辑与数据库内容完全隔离(出于几个原因......其中一个就是我希望将来能与其他数据库一起使用)

现在我正在使用MongoDB,我创建了一些可以处理创建并将打字稿对象写入DB的infractractures,它是这样的:

import Address, { AddressSchema } from './addressDetails';
import { Document, Schema, model } from 'mongoose';

export default class User {
  name: String;
  address: Address;

  constructor(params: { name: String, address: Address }) {
    this.name = params.name;
    this.address = params.address;
  }
}

const UserSchema = new Schema({
  name: String,
  details: AddressSchema
});

export interface UserDocument extends User, Document { };

export const UserModel = model<UserDocument>('User', UserSchema);

现在地址是另一个看起来像这样的对象:

import { Document, Schema, model } from 'mongoose';

export default class Address {
    country: String;
    city: String;
    streetAddress: String;

    constructor(params: { country: String, city: String, streetAddress: String }) {
        this.country = params.country;
        this.city = params.city;
        this.streetAddress = params.streetAddress;
    }
}

export const AddressSchema = new Schema({
    country: String,
    city: String,
    streetAddress: String
});

所以实际上Address是User中的嵌套模式。 因此,当我保存UserModel时,它看起来像这样:

const newUser = new User(newUserParams);
const newUserModel = new UserModel(newUser);

public saveModel(newUserModel): Promise<any> {
    return new Promise((resolve, reject) => {
        newUserModel.save((err, data) => {
            if (err) {
                log('error', err, undefined, undefined);
                reject(err);
            }
            resolve(data);
        });
    });
}

在数据库内部,我们保存的用户看起来像嵌套信息,其地址部分为ID。

现在我不知道的是如何阅读文档和分析,以便我可以创建一个新的完整用户主对象实例。

通过完整我的意思是它还会创建来自文档的嵌套地址信息的实例。

非常感谢你们!

0 个答案:

没有答案