SchemaTypes 数据类型

SchemaTypes handle definition of path defaults, validation, getters, setters, field selection defaults for queries and other general characteristics for Strings and Numbers. Check out their respective API documentation for more detail.

数据类型用于定义默认路径, 验证方式, 获取/设置方法,用于数据库查询的默认字段,以及其他针对字符串与数字的特性。关于详细信息请查阅相关API文档。

译注:默认路径即某个域相对于文档而言的路径,如{a: 1}这个文档中,若指定路径为’a’,即可访问到1这个数据。

Following are all valid Schema Types.
接下来是Mongoose中所有可用的数据类型。

  • String
    字符串
  • Number
    数字
  • Date
    日期
  • Buffer
    缓冲区
  • Boolean
    布尔值
  • Mixed
    混合
  • Objectid
    对象ID
  • Array
    数组

Example
举个栗子!

var schema = new Schema({name:    String,binary:  Buffer,living:  Boolean,updated: { type: Date, default: Date.now },age:     { type: Number, min: 18, max: 65 },mixed:   Schema.Types.Mixed,_someId: Schema.Types.ObjectId,array:      [],ofString:   [String],ofNumber:   [Number],ofDates:    [Date],ofBuffer:   [Buffer],ofBoolean:  [Boolean],ofMixed:    [Schema.Types.Mixed],ofObjectId: [Schema.Types.ObjectId],nested: {stuff: { type: String, lowercase: true, trim: true }}
})// example usevar Thing = mongoose.model('Thing', schema);var m = new Thing;
m.name = 'Statue of Liberty';
m.age = 125;
m.updated = new Date;
m.binary = new Buffer(0);
m.living = false;
m.mixed = { any: { thing: 'i want' } };
m.markModified('mixed');
m._someId = new mongoose.Types.ObjectId;
m.array.push(1);
m.ofString.push("strings!");
m.ofNumber.unshift(1,2,3,4);
m.ofDates.addToSet(new Date);
m.ofBuffer.pop();
m.ofMixed = [1, [], 'three', { four: 5 }];
m.nested.stuff = 'good';
m.save(callback);

 

Usage notes 用法要点

Dates 日期型

Built-in Date methods are not hooked into the mongoose change tracking logic which in English means that if you use a Date in your document and modify it with a method like setMonth(), mongoose will be unaware of this change and doc.save() will not persist this modification. If you must modify Date types using built-in methods, tell mongoose about the change with doc.markModified(‘pathToYourDate’) before saving.

Mongoose不跟踪JS内建的日期方法对数据造成的改变。这意味着如果你在文档中使用Date 类型并用setMonth之类的方法去修改它,Mongoose不会意识到它的改变,调用doc.save方法保存时不会保留这个修改。如果你一定要用JS内建的方法修改Date类型的数据,在保存之前用doc.markModified 方法告诉Mongoose这个改变。

var Assignment = mongoose.model('Assignment', { dueDate: Date });
Assignment.findOne(function (err, doc) {doc.dueDate.setMonth(3);doc.save(callback); // THIS DOES NOT SAVE YOUR CHANGEdoc.markModified('dueDate');doc.save(callback); // works
})

Mixed 混合型

An “anything goes” SchemaType, its flexibility comes at a trade-off of it being harder to maintain. Mixed is available either through Schema.Types.Mixed or by passing an empty object literal. The following are equivalent:

混合型是一种“存啥都行”的数据类型,它的灵活性来自于对可维护性的妥协。Mixed类型用Schema.Types.Mixed 或者一个字面上的空对象{}来定义。下面的定义是等价的:

var Any = new Schema({ any: {} });
var Any = new Schema({ any: Schema.Types.Mixed });

Since it is a schema-less type, you can change the value to anything else you like, but Mongoose loses the ability to auto detect and save those changes. To “tell” Mongoose that the value of a Mixed type has changed, call the .markModified(path) method of the document passing the path to the Mixed type you just changed.

因为它是一种 无拘无束,无法无天 无固定模式的类型,所以你可以想怎么改就怎么改,但是Mongoose 没有能力去自动检测和保存这些改动。请通过调用doc.markModified 方法来告诉Mongoose某个混合类型的值被改变了。

person.anything = { x: [3, 4, { y: "changed" }] };
person.markModified('anything');
person.save(); // anything will now get saved

ObjectIds 对象ID型

To specify a type of ObjectId, use Schema.Types.ObjectId in your declaration.
Schema.Types.ObjectId 来声明一个对象ID类型。

译注:对象ID同MongoDB内置的_id 的类型。由24位Hash字符串。

var mongoose = require('mongoose');
var ObjectId = mongoose.Schema.Types.ObjectId;
var Car = new Schema({ driver: ObjectId });
// or just Schema.ObjectId for backwards compatibility with v2

Arrays 数组型

Provide creation of arrays of SchemaTypes or Sub-Documents.
提供创造各种数据类型或子文档的数组的方法。

var ToySchema = new Schema({ name: String });
var ToyBox = new Schema({toys: [ToySchema],buffers: [Buffer],string:  [String],numbers: [Number]// ... etc
});

Note: specifying an empty array is equivalent to Mixed. The following all create arrays of Mixed:
注意:用一个空数组来定义等价于创建一个混合型的数组。下面都是创建混合型数组的例子:

var Empty1 = new Schema({ any: [] });
var Empty2 = new Schema({ any: Array });
var Empty3 = new Schema({ any: [Schema.Types.Mixed] });
var Empty4 = new Schema({ any: [{}] });

Creating Custom Types 创建自定义类型

Mongoose can also be extended with custom SchemaTypes. Search the plugins site for compatible types like mongoose-long, mongoose-int32 and other types. To create your own custom schema take a look at Creating a Basic Custom Schema Type.
Mongoose也支持使用自定义的数据类型来拓展功能。从Mongoose插件站搜索合适的类型,比如mongoose-long,mongoose-int32或者其他类型。 想要自己创建类型的话请参考创建一个基础的自定义数据类型。


转载于:https://www.cnblogs.com/jokerjason/p/7803754.html

Mongoose之 SchemaTypes 数据类型相关推荐

  1. mongoose 定义经纬度数据类型

    本来想用Double在mongoose中直接定义经纬度的.但是发现mongoose的数据类型只有下面几种. String Number Date Buffer Boolean Mixed Object ...

  2. Mongoose属性

    1.Mongoose() Mongoose类的构造函数.一个实例. Mongoose.prototype.Collection() Mongoose.prototype.Connection() Mo ...

  3. mongodb连接失败_mongodb 数据库及数据分页

    本文转载于 SegmentFault 社区作者:小小蚊子     在做自己的一个小项目时,新学习了 mongodb非关系型数据库,使用了 mongoose封装好的查询方法,包括数据库分页用到的limi ...

  4. Mongoose Schema 和 SchemaTypes

    本文已整理到 Github,地址

  5. mongoose操作mongodb

    http://mongoosejs.com/docs/api.html#index-js mongoose是nodejs环境下操作mongodb的模块封装,使用mongoose之后,实际上只需要在mo ...

  6. mongoose 笔记

    快速启动 首先需要安装MongoDB和Node.js. 然后使用npm下载mongoose: npm install mongoose 接着我们直接在项目中引入mongoose,并且连接数据库就会在本 ...

  7. koa+mongoose基础入门

    1.mongoose基本使用 1.安装mongodb npm install mongodb 2.引入mongodb数据表,连接mongodb,通过node来对mongodb进行异步的增删改查 con ...

  8. mongoose 实用 API 总结

    2019独角兽企业重金招聘Python工程师标准>>> 一.介绍 1. 概述 mongoose 模块用于简化 node 与数据库 mongodb 之间的操作,目的是通过简便的 API ...

  9. Nodejs+Express学习二(Mongoose基础了解)

    学习Node注定少不了与数据库打交道,而MongoDB和Node可以说是绝配,这篇主要是简单介绍Mongoose这个模块. 由于本人也是边学边写的这篇文章,绝对会有新手的味道,请大神看到这里就表往下看 ...

最新文章

  1. java好用的hbase库_Hbase入库基于java
  2. 东农计算机应用与技术离线作业,东农16春《计算机应用与技术》在线作业.doc
  3. python第三方库numpy-Python三方库:Numpy(数组处理)
  4. Coherence-Enhancing Shock Filters(附源码)
  5. SimpleUrlHandlerMapping 处理器映射的配置--转
  6. android studio发布项目到github
  7. 计算机中汉字用什么表示什么,在计算机中汉字是用几个字节表示
  8. ArcGIS中文注记图层发布服务后变乱码(方框乱码)/如何有效修改注记要素类文字样式
  9. 【最强宝典】后端面试知识点合集
  10. mysql查询分数前三个_MySQL中查询获取每个班级成绩前三名的学生信息
  11. mysql 小于转义_MyBatis中大于和小于号的转义写法
  12. 牛客网暑期ACM多校训练营(第三场) J.Distance to Work 计算几何
  13. 游戏服务器的常用架构
  14. 《微观经济学》 第九章
  15. c语言一元多项式课程设计,一元多项式的计算数据结构课程设计.doc
  16. 耿丹CS16-2班第三次作业汇总
  17. PyQt5 作图之 pyqtgraph PlotWidget 代码结构拆解
  18. SciTE编译lua的快捷键
  19. 几种常用的接口协议的积累,欢迎补充
  20. 市场调研计算机配置单,PC机市场调研和选配方案.doc

热门文章

  1. DBX到PDF转换器
  2. client mysql 逗号_mysql comment line client(MySQL命令行常用操作)
  3. mysql buffer 命中率_从MySQL的源码剖析Innodb buffer的命中率计算
  4. Wallpaper:基于Typecho的壁纸头像站主题
  5. 极致cms1:1精仿资源哟源码
  6. 小程序功能模块-飞鱼知识变现小程序2.5.3源码
  7. 100套精美英文HTML页面源码
  8. 关于C#函数对象参数传递的问题
  9. Magento去除前台URL中显示的index.php
  10. Python_51job爬虫