mongoose 数据库操作2

 mongoose的内置的主要功能讲解

除了定义文档结构和你要存储的数据类型外,模式(Schema)还用于以下定义:

·        Validators
(异步和同步)

·        Defaults -
默认值

·        Getters

·        Setters

·        Indexes -
索引

·        Middleware -
中间件

·        Methods definition -
方法定义

·        Statics definition -
静态定义

·        Plugins -
插件

Aside from defining thestructure of your documents and the types of data you‘re storing, a Schemahandles the definition of:

·        Validators (async andsync)

·        Defaults

·        Getters

·        Setters

·        Indexes

·        Middleware

·        Methods definition

·        Statics definition

·        Plugins

·        pseudo-JOINs

(1)验证器

验证器通过ShcemaType定义

内部使用中间件

默认在使用save操作时自动开启(create操作应该是不管用的,这个我们可以试一试)

使用异步操作

验证器可以自定义

定义验证通过,path(“属性”).validate(function(value){})来定义,我们看看例子:

<pre name="code" class="javascript">

var toySchema =
new
Schema({

color: String,

name: String

});

var Toy = mongoose.model(‘Toy‘, toySchema);

Toy.schema.path(‘color‘).validate(function (value) {

return
/blue|green|white|red|orange|periwinkle/i.test(value);

}, ‘Invalid color‘);

var toy = new
Toy({ color:
‘grease‘});

toy.save(function (err) {

// err is ourValidationError object

// err.errors.coloris a ValidatorError object

console.log(err.errors.color.message)
// prints‘Validator "Invalid color" failed for path color with value `grease`‘

console.log(String(err.errors.color))
// prints‘Validator "Invalid color" failed for path color with value `grease`‘

console.log(err.errors.color.type) // prints "Invalid color"

console.log(err.errors.color.path) // prints "color"

console.log(err.errors.color.value)
// prints"grease"

console.log(err.name)
// prints"ValidationError"

console.log(err.message)
// prints"Validation failed"

});

</pre>

上面的例子很简单嘛,

如果用不到验证的方法那么,直接create 就可以

Toy.create({xx:xxx},function(err,schema){});

(2)默认值

上例子:

<pre name="code" class="javascript">

var schema =
new Schema({ n: { type: Number, default:
10 })

var M = db.model(‘M‘, schema)

var m = new M;

console.log(m.n) // 10

</pre>

在方案(Schema)设置defualt值后,值初始化模型后就可以直接获取这个值,那么我们在插入操作中要如何去做呢?

<pre name="code" class="javascript">

var db = require(‘mongoose‘)

,Schema = db.Schema;

var schema = new Schema({ n: { type: Number, default: 10 }});

db.connect(‘mongodb://localhost:8888/toy‘, function (err) {

var Toy = db.model(‘Toy‘, schema,"toy");

new Toy({}).save(function(err){

if(err)return console.log(err);

console.log("报错成功");

});

if (err) throw err;

});

</pre>

这个例子中关键的地方在于new Toy({}) 并没有写n这个对象,那么我们来查一下数据库看一下输出:

<pre name="code" class="javascript">

> db.toy.find()

{ "_id" : ObjectId("5361a5fa62c7cc803624ec0d"),"n" : 10, "__v" : 0 }

</pre>

(3)给模型添加一个静态的方法:

<pre name="code" class="javascript">

// assign afunction to the "statics" object of our animalSchema

animalSchema.statics.findByName =
function
(name, cb) {

this.find({ name:
newRegExp(name, ‘i‘) }, cb);

}

var Animal = mongoose.model(‘Animal‘,animalSchema);

Animal.findByName(‘fido‘,
function (err, animals) {

console.log(animals);

});

</pre>

(4)创建索引:

在mongodb数据库中索引排序1 和 -1 代表正反

<pre name="code" class="javascript">

var animalSchema=
new
Schema({

name: String,

type: String,

tags: { type: [String], index:
true } // field level

});

animalSchema.index({ name:
1, type: -1 });
// schema level

</pre>

(5)插件就是mongoose提供的一个可以模块化的一个功能,可以把面的一些零散的功能写到一个插件中组合起来,比如set get 方法中间件等写到一个模块中:

<pre name="code" class="javascript">

// lastMod.js

module.exports = exports =function
lastModifiedPlugin
(schema, options){

schema.add({ lastMod: Date })

schema.pre(‘save‘,
function (next) {

this.lastMod =
new
Date

next()

})

if(options && options.index) {

schema.path(‘lastMod‘).index(options.index)

}

}

// game-schema.js

var lastMod= require(‘./lastMod‘);

varGame = new Schema({ ... });

Game.plugin(lastMod, {index:
true });

// player-schema.js

varlastMod = require(‘./lastMod‘);

varPlayer =
new
Schema({ ... });

Player.plugin(lastMod);

</pre>

mongoose 数据库操作2,布布扣,bubuko.com

时间: 2024-07-31 14:34:57

mongoose 数据库操作2的相关文章

mongoose 数据库操作 - 分页

使用mongoose 添加分页方法,暂时还没发现什么更好的方法,我使用的方法是,直接在源码中添加 找到 node_modules/mongoose/lib/model.js打开这个文件,里面添加这段代码 /** * author:gtt * updateTime:2014-5-3 */ Model.execPageQuery = function find (currentPage,pageSize, conditions, fields, options, callback) { if ('f

mongoose 数据库操作3

Model.find(query, fields, options, callback) Model.find({ 'some.value': 5 }, function (err, docs) { // docs is an array }); Model.findOne Model.findOne({ age: 5}, function (err, doc){ // doc is a Document }); Model.findById Model.findById(obj._id, fu

转:Mongoose使用操作

一般我们不直接用MongoDB的函数来操作MongoDB数据库 Mongose就是一套操作MongoDB数据库的接口. 连接数据库 // mongoose 链接var mongoose = require('mongoose');var db       = mongoose.createConnection('mongodb://127.0.0.1:27017/NodeJS');  Schema 一种以文件形式存储的数据库模型骨架,无法直接通往数据库端,也就是说它不具备对数据库的操作能力.可以

C# .NET更智能的数据库操作的封装

前述: 对数据库操作的封装,相信网络上已经有一大堆,ORM框架,或者是.NET本身的EF,都很好的支持数据库操作.这篇文章是分享自己所思考的,对数据库操作的简单封装.我对于这篇文章,认为被浏览者所关注重点的是怎么分析设计数据库操作封装,代码是其次.而且,这是我第一篇文章,为了想好怎么实现花了些天,代码是博客发表时现写的.所以我想,使用可能还有bug,而且没有try catch异常的设计. 这个框架我理应做到对数据库无关,无论是哪个数据库都能够使用.不过,重点在于分析,而不是代码.所以,为了更好的

python--第十一天总结(paramiko 及数据库操作)

数据库操作 Python 操作 Mysql 模块的安装 linux:     yum install MySQL-python window:     http://files.cnblogs.com/files/wupeiqi/py-mysql-win.zip

数据库——基础(数据库操作,表格操作)——增加高级查询

笔记 LAMP:Linx(操作系统) A(阿帕奇)——网页的应用程序 M(Mysql):体积小,应用简单 P(PHP) 第一步:搭建网页环境——A\M\P WAMP:用WAMP搭建环境 DW:更好的显示 数据库的基本操作: 数据库——表结构——字段(列) 每一行数据成为一条数据(记录) 特点:关系型数据库,有严格的规范 1.必须有主键:能够唯一标识一条数据的字段 2 T-SQL:通用的数据库操作语句 自增长列code(主键列) ;连接键表 最后一个字段不加 ,#注释 创建表:create tab

SQLiteDatabase数据库操作详解

今天花了点时间总结了一下数据的相关知识android中系统自带的数据库SQLiteDatabase数据库,这种数据库操作起来比ormLite数据库(第三方的)麻烦点,但是我对这种数据库操作比较熟悉所以我就采用了这种数据库,如有错误欢迎大家批评指正,谢谢 1.SQLiteDatabase SQLiteDatabase本身是一个数据库的操作类,但是如果想进行数据库的操作,还需要android.database.sqlite.SQLiteOpenHelper类的帮助,在执行SQL语句时execSQL(

Android打造属于自己的数据库操作类。

1.概述 开发Android的同学都知道sdk已经为我们提供了一个SQLiteOpenHelper类来创建和管理SQLite数据库,通过写一个子类去继承它,就可以方便的创建.管理数据库.但是当我们需要去做增删改查的操作的时候,就得通过getWritableDatabase获取一个SQLiteDataBase然后老老实实去写操作值的put以及查询返回的Cursor处理,其实我们可以搞一个对象来帮我们干这些事情,打造属于你自己的数据库操作类. 2.操作类的初显形 假设现在我们什么都没有,我们要去搞一

laravel 数据库操作小例子

public function demo() { $res = null; //insert数据插入 //$user=array('username'=>'joy','password'=>'123456','age'=>23); //$res = DB::table('users')->insert($user); /* 数据查询 $res = DB::table('users')->where('username','joy')->get(); $res = DB: