当前位置: 首页 > news >正文

orm2 中文文档 3.1 模型属性

译者:飞龙

来源:Model Properties

模型和一些关联具有一个或多个属性,每个属性有类型以及一些可选设置,你可以自行选择它们(或使用默认设置)。

类型

受支持的类型是:

  • text:文本字符串;

  • number:浮点数。你可以指定size2 | 4 | 8

  • integer:整数。你可以指定size2 | 4 | 8

  • booleantruefalse的值;

  • date:日期对象。你可以指定timetrue

  • enum:一个备选列表中的值;

  • object:JSON对象;

  • point:N维的点(不被广泛支持);

  • binary:二进制数据;

  • serial:自增长的整数,用于主键。

每个类型都有额外的选项。这个模型定义使用了它们中的绝大多数:

var Person = db.define("person", {
    name    : { type: "text", size: 50 },
    surname : { type: "text", defaultValue: "Doe" },
    male    : { type: "boolean" },
    vat     : { type: "integer", unique: true },
    country : { type: "enum", values: [ "USA", "Canada", "Rest of the World" ] },
    birth   : { type: "date", time: false }
});

所有类型都支持required(布尔值),unique(布尔值)和defaultValue(文本)。文本类型也支持最大尺寸(数值)和big(布尔值,用于非常长的字符串)。数值类型是浮点数,支持size(数值,字节大小)和unsigned(布尔值)。日期类型支持time(布尔值)。

要注意8字节的数值有其局限性。

如果你打算用默认选项,你可以使用原生类型来指定属性类型:

var Person = db.define("person", {
    name    : String,
    male    : Boolean,
    vat     : Number, // FLOAT
    birth   : Date,
    country : [ "USA", "Canada", "Rest of the World" ],
    meta    : Object, // JSON
    photo   : Buffer  // binary
});

将ORM字段映射到不同名称的数据库列中

var Person = db.define("person", {
    name    : { type: 'text', mapsTo: 'fullname' }
});

ORM属性name映射person表的fullname列。

自定义类型

你可以向ORM添加你自己的类型,像这样:

db.defineType('numberArray', {
  datastoreType: function(prop) {
    return 'TEXT'
  },
  // This is optional
  valueToProperty: function(value, prop) {
    if (Array.isArray(value)) {
      return value;
    } else {
      return value.split(',').map(function (v) {
        return Number(v);
      });
    }
  },
  // This is also optional
  propertyToValue: function(value, prop) {
    return value.join(',')
  }
});
var LottoTicket = db.define('lotto_ticket', {
  numbers: { type: 'numberArray' }
});

一些可用的高级自定义类型,能够让你像 PostGIS 那样使用模型。请见这个 spec 。

相关文章:

  • 点击复选框添加或删除value值到input输入框中
  • Android Property Animation属性动画:rotation旋转(2)
  • linux上很方便的上传下载文件工具rz和sz使用介绍
  • 2016.1.13 随笔
  • JMeter基础之一 一个简单的性能测试
  • [Java开发之路](14)反射机制
  • MDEV Primer
  • 闹心的变量
  • [转载]项目风险管理七种武器-碧玉刀
  • 会声会影简易相册制作教程
  • Spark学习之基于MLlib的机器学习
  • zabbix在centos6下的编译安装
  • C语言 百炼成钢1
  • 【Linux】环境变量设置
  • Apache安装教程
  • 【翻译】babel对TC39装饰器草案的实现
  • Centos6.8 使用rpm安装mysql5.7
  • js算法-归并排序(merge_sort)
  • LeetCode18.四数之和 JavaScript
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • SpiderData 2019年2月23日 DApp数据排行榜
  • vue和cordova项目整合打包,并实现vue调用android的相机的demo
  • yii2权限控制rbac之rule详细讲解
  • 闭包--闭包作用之保存(一)
  • 从0实现一个tiny react(三)生命周期
  • 经典排序算法及其 Java 实现
  • 坑!为什么View.startAnimation不起作用?
  • 配置 PM2 实现代码自动发布
  • 实现简单的正则表达式引擎
  • 体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
  • 一起参Ember.js讨论、问答社区。
  • 一些css基础学习笔记
  • 原生Ajax
  • 【云吞铺子】性能抖动剖析(二)
  • 阿里云API、SDK和CLI应用实践方案
  • 阿里云重庆大学大数据训练营落地分享
  • 翻译 | The Principles of OOD 面向对象设计原则
  • 我们雇佣了一只大猴子...
  • # Pytorch 中可以直接调用的Loss Functions总结:
  • (02)vite环境变量配置
  • (11)MSP430F5529 定时器B
  • (2020)Java后端开发----(面试题和笔试题)
  • (2022 CVPR) Unbiased Teacher v2
  • (AngularJS)Angular 控制器之间通信初探
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (k8s中)docker netty OOM问题记录
  • (Matlab)使用竞争神经网络实现数据聚类
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (第27天)Oracle 数据泵转换分区表
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (六) ES6 新特性 —— 迭代器(iterator)
  • (转)我也是一只IT小小鸟
  • (轉貼) UML中文FAQ (OO) (UML)
  • .NET Core Web APi类库如何内嵌运行?