Nestjs mongodb
使用"@meanie/mongoose-to-json"转换查询后返回的json数据
将"_id"转为"id",并删除"__v"字段
import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document } from 'mongoose';
import * as toJSON from '@meanie/mongoose-to-json';
export type CatDocument = Cat & Document;
@Schema()
export class Cat {
@Prop()
name: string;
@Prop()
age: number;
@Prop()
breed: string;
}
export const CatSchema = SchemaFactory.createForClass(Cat).plugin(toJSON);
全局使用
MongooseModule.forRoot('mongodb://localhost/test', {
connectionFactory: (connection) => {
connection.plugin(require('@meanie/mongoose-to-json'));
return connection;
},
}),
Prop
@Schema()
export class Cat {
@Prop({ required: true })
name: string;
@Prop([Number])
ages: number[];
@Prop({ default: 'lll' })
breed?: string;
@Prop({ type: Date, default: Date.now })
date?: Date;
}
this.catModel.insertMany([{ name: 'aaa', ages: [2, 1] }]);
这将返回:
[
{
"breed": "lll",
"ages": [
2,
1
],
"name": "aaa",
"date": "2021-01-07T02:44:06.459Z",
"id": "5ff67576b9280e2aa0728ee8"
}
]
如果你将date改为number类型,将返回时间戳(毫秒)
@Prop({ type: Number, default: Date.now })
date?: number;
链表
@Schema()
export class Breed {
@Prop()
breed: string;
}
export const BreedSchema = SchemaFactory.createForClass(Breed);
@Schema({versionKey: false})
export class Cat {
@Prop({ required: true })
name: string;
@Prop({ type: mongoose.Schema.Types.ObjectId, ref: 'Breed' })
breed: Breed;
}
export const CatSchema = SchemaFactory.createForClass(Cat);
增:
this.catModel.insertMany([
{
name: 'cat 1',
breed: mongoose.Types.ObjectId('5ff67afda6c7062a2a97575f'),
},
]);
查:
this.catModel.find().populate('breed');
如果一只猫含有多个品种
@Schema({ versionKey: false })
export class Cat {
@Prop({ required: true })
name: string;
@Prop({ type: [{ type: mongoose.Schema.Types.ObjectId, ref: 'Breed' }] })
breed: Breed;
}
// data
{
"_id" : ObjectId("5ff69a49c96ca7d6c68d1b26"),
"name" : "cat 1",
"breed" : ["5ff69995c96ca7d6c68d1b1d", "5ff699b9c96ca7d6c68d1b22"]
}
保存新数据:
const newBreed = new this.breedModel({
breed: 'bbbb',
});
newBreed.save();
return this.catModel.insertMany([
{
name: 'cat 1',
breed: newBreed._id,
},
]);
Nestjs mongodb的更多相关文章
- Nestjs 使用mongodb
Docs: https://docs.nestjs.com/techniques/mongodb yarn add @nestjs/mongoose mongoose 链接 // sec/app.mo ...
- Nestjs 缓存
Docs: https://docs.nestjs.com/techniques/caching yarn add @nestjs/mongoose mongoose yarn add cache-m ...
- 在 Nest.js 中使用 MongoDB 与 TypeORM
在 Nest.js 中使用 MongoDB 与 TypeORM 首先要在 database 文件夹里建立DatabaseModule模块文件, // database/database.module. ...
- Nestjs入门学习教程
初次接触Nest,有问题欢迎指出: 简介 NestJS是一个用于构建高效.可扩展的Node.js服务器端应用程序的开发框架.简单来说是一款Node.js的后端框架. 它利用JavaScript的渐进增 ...
- 【翻译】MongoDB指南/聚合——聚合管道
[原文地址]https://docs.mongodb.com/manual/ 聚合 聚合操作处理数据记录并返回计算后的结果.聚合操作将多个文档分组,并能对已分组的数据执行一系列操作而返回单一结果.Mo ...
- 【翻译】MongoDB指南/CRUD操作(四)
[原文地址]https://docs.mongodb.com/manual/ CRUD操作(四) 1 查询方案(Query Plans) MongoDB 查询优化程序处理查询并且针对给定可利用的索引选 ...
- 【翻译】MongoDB指南/CRUD操作(三)
[原文地址]https://docs.mongodb.com/manual/ CRUD操作(三) 主要内容: 原子性和事务(Atomicity and Transactions),读隔离.一致性和新近 ...
- 【翻译】MongoDB指南/CRUD操作(二)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(二) 主要内容: 更新文档,删除文档,批量写操作,SQL与MongoDB映射图,读隔离(读关 ...
- 【翻译】MongoDB指南/CRUD操作(一)
[原文地址]https://docs.mongodb.com/manual/ MongoDB CRUD操作(一) 主要内容:CRUD操作简介,插入文档,查询文档. CRUD操作包括创建.读取.更新和删 ...
随机推荐
- 【LinuxShell】wget 命令详解
参数 待补充 返回值 code means 0 No problems occurred 1 Generic error code 2 Parse error - for instance ...
- springboot配置rabbitmq
一.消息生成者 1.1消息生成者配置 1.2 消息发送端代码 1.3 创建交换机,队列,并建立关系 二.消费者 2.1消费者 三.限流配置 3.1配置文件 #在单个请求中处理的消息个数,他应该大于等于 ...
- js部分知识整理,google浏览器的代码调试
整理一些学过的js知识点,包括js中3个括号的含义,this的使用,递归,google浏览器的代码调试.Location的属性及常用方法,window对象常用方法,open方法等. js括号 在js中 ...
- Java 跨域 Json字符转类对象
前言 解析json 测试类 测试结果 前言 对于从其他服务器的url获得数据,我们一般都为json数据传输,比如服务器B要从服务器A的url获得分页信息,得到json字符后如果可以方便快捷操作要转为自 ...
- Dos命令思维导图
通过思维导图的方式,总结常用Dos命令. 各种思维导图下载地址
- Java 复习整理day09
package com.it.demo01_thread; /* 案例: 多线程简介. 概述: 指的是进程有多条执行路径, 统称叫: 多线程. 进程: 指的是可执行程序, 文件(例如: .exe) 大 ...
- C++ 标准模板库(STL):map
目录 4. map 4.1 map的定义 4.2 map容器内元素的访问 4.3 map常用函数实例解析 4.4 map的常见用途 4. map map翻译为映射,也是常用的STL容器. 在定义数组时 ...
- Flink-v1.12官方网站翻译-P027-State Schema Evolution
状态方案的演变 Apache Flink流媒体应用通常被设计为无限期或长时间运行.与所有长期运行的服务一样,应用程序需要更新以适应不断变化的需求.这对于应用程序所针对的数据模式也是一样的,它们会随着应 ...
- Flink-v1.12官方网站翻译-P022-Working with State
有状态程序 在本节中,您将了解Flink为编写有状态程序提供的API.请看一下Stateful Stream Processing来了解有状态流处理背后的概念. 带键值的数据流 如果要使用键控状态,首 ...
- vs中python包安装教程
vs安装python很简单,只需要在vs安装包中选择python就可以了,这里使用的python3.7: 如果有了解,都知道安装python包的指令:"pip install xxx&quo ...