博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[转] mongoose 之Shema
阅读量:6479 次
发布时间:2019-06-23

本文共 2696 字,大约阅读时间需要 8 分钟。

     之见到我写点啥简直是奇迹,由于现在喜欢上玩转node.js +mongoose,个人爱好,靠近前端的又是英文文档,苦逼得很,悟出来一个写一个吧。之前喜欢误打误撞,网上搜索一点解决一下问题,后来实在难看得很,为啥,解决一个小问题又来大问题,刚解决完大问题,有来巨大的bug,所有必需系统的学习,就算爱折腾也得有点头绪,决定先认真看完文档再说吧,免得想开发点啥都折腾得没有兴趣了……。

    首先我们得知道Schema常用的有哪些数据类型,不能只知道需要一个见一个就用一个,这样会感觉一直在摸索中探寻,不能把握全局。

    

   

  •   字符串
  •  数字,什么int啊,float啊,double啊,都只有这个Number就哦了
  •  | Bool
  •  数组
  •  二进制
  •  日期
  •  | Oid mongodb主键一般都是用{_id:Schema.Types.objectId}
  •  这个强大,混合型的,也就是当你不确定这个属性存什么的时候设置为它吧,如果在被确立类型赋值后,需要用到一个函数来通知修改这个类型。下文会讲到。
    如何定义使用呢,请往下看:
    var mongoose = require('mongoose');var ObjectId = mongoose.Schema.Types.ObjectId;
    当然可以简略使用,请看如下定义
//定义children的子嵌套var child = new Schema({ name: String }); //添加字段方式1 var schema = new Schema({ name: String, age: Number, children: [child]}); //添加字段方式2 //var schema = new Schema; // schema.add({name :String, age: Number, children: [child] }); var Tree = mongoose.model('Tree', schema); // 设置 schema 选项 new Schema({ name: String }, { _id: false, autoIndex: false })

    重点讲的就是,我们在定义嵌套文档是一般都不需要自动生成的_id,和索引对不?我们只要在Schema的第二个参数里设置下即可:
    _id:false或者_id:0,禁止自动生成主键
    autoIndex:false 或者autoIndex:0 禁止自动创建索引
    对了 false可以用数字0表示,true嘛你懂的。还有跟多的选项供你按需使用。一大串。
     

     Options: 其他可选项

  • : bool - 默认 true
  • : bool - 默认 true
  • : bool - 默认 false
  • : string - 无
  • : bool - 默认 true
  • : bool - 默认 true
  • minimize: bool - controls  behavior when called manually - 默认 true
  • : string
  • : bool - 默认 true.
  • : bool - 默认 null
  • : bool - 默认 true
  •  - object - 无
  •  - object - 无
  • : bool - 默认 "__v" 这玩意儿有些讨厌,会自动在数据库里生成这个字段,最好禁用。

 

     这个method方法很不错,当我们增删查改完想返回必要数据是可以交给此方法来做。如果一个方法的时候在method第一个参数设定方法名字符串,第二个参数为回调函数,如下:

var schema = kittySchema = new Schema(..);schema.method('meow', function () { console.log('meeeeeoooooooooooow'); }) var Kitty = mongoose.model('Kitty', schema); var fizz = new Kitty; fizz.meow(); // meeeeeooooooooooooow

    如果多个方法的时候,可以同时绑定,如下来使用。当然你也可以一个一个的如上面的列子来写。

schema.method({    purr: function () {} , scratch: function () {} }); // later fizz.purr(); fizz.scratch();

 

    这个path方法用于修改属性的类型,原来已经定义好的属性name的Schema类型为String,要改成Number就这样使用。 

schema.path('name', Number) //修改name的数据类型

    如果要获取这个属性的数据类型,使用 

schema.path('name') // 返回一个 Schema的类型

  

    对于这个方法,用处在于把自定义的处理方法添加到event  emitter事件循环上去,给shema注册事件并能接收model处理后返回的文档,使用model实例来调用。 

var schema = new Schema(..);schema.post('save', function (doc) { console.log('this fired after a document was saved'); }); var Model = mongoose.model('Model', schema); var m = new Model(..); m.save(function (err) { console.log('this fires after the `post` hook'); });

 

 注册静态方法,用实例直接调用,不需要再new一下了

var schema = new Schema(..);schema.static('findByName', function (name, callback) { return this.find({ name: name }, callback); }); var Drink = mongoose.model('Drink', schema); Drink.findByName('sanpellegrino', function (err, drinks) { // });

 

转载于:https://www.cnblogs.com/chris-oil/p/9136623.html

你可能感兴趣的文章
HDU ACM 1050 Moving Tables
查看>>
Django templates加载css/js/image等静态资源
查看>>
Eclipse C + GTK2.0环境构筑
查看>>
caffe solver
查看>>
Rhel6-heartbeat+lvs配置文档
查看>>
[CF340D]Bubble Sort Graph/[JZOJ3485]独立集
查看>>
ORACLE分科目统计每科前三名的学生的语句
查看>>
0317复利计算的回顾与总结
查看>>
函数对象
查看>>
最全最新个税计算公式---今天你税了吗?
查看>>
linux shell 正则表达式(BREs,EREs,PREs)差异比较(转,当作资料查)
查看>>
MongoDB--CSharp Driver Quickstart .
查看>>
#pragma mark 添加分割线 及 其它类似标记 - 转
查看>>
二分法求平方根(Python实现)
查看>>
使用startActivityForResult方法(转)
查看>>
so在genymotation中错误问题
查看>>
Visual Studio 原生开发的10个调试技巧(二)
查看>>
Windows内核再次出现0Day漏洞 影响win2000到win10所有版本 反病毒软件恐成瞎子
查看>>
H3C品牌刀片系统强势首发
查看>>
【CSS系列】图像映射
查看>>