Node Mongoose用法详解【Mongoose使用、Schema、对象、model文档等】


Posted in Javascript onMay 13, 2020

本文实例讲述了Node Mongoose用法。分享给大家供大家参考,具体如下:

Mongoose简介

是一个将JavaScript对象与数据库产生关系的一个框架,Object related model。操作对象,就是操作数据库了。对象产生了,同时也持久化(数据进入数据库)了。

初步使用Mongoose

连接数据库

var mongoose = require('mongoose');

//创建数据库连接
var db = mongoose.createConnection('mongodb://localhost:27017/zf');

//监听open事件
db.once('open',function ( callback ) {
  
  console.log('数据库成功连接');
  
});

module.exports = db;

定义模型

创造schema -> 定义在schema上的scatic方法 -> 创造模型

new mongoose.schema({}); //参数是json,定义字段。

创建模型 db.model(collectionsName,schemaName);

var mongoose = require('mongoose');
var db = require('./db.js');

//创建一个schema结构。 schema--模式
var StudentSchema = new mongoose.Schema({
  name: {type: String, default: '匿名用户'},
  age: { type: Number },
  sex: { type: String }
});
// 创建方法
StudentSchema.statics.zhaoren = function ( name,callback ) {
  this.model('Student').find({'name': name},callback);
}

//创建修改方法
StudentSchema.statics.xiugai = function ( conditions,update,options,callback ) {
  this.model('Student').update(conditions,update,options,callback);
}
var studentModel = db.model('Student',StudentSchema);
module.exports = studentModel;

app.js 中只操作类,不操作数据库。

var Cat = mongoose.model('Cat'{'name': String, age: Number});
Cat.find({'name': 'tom'},function( err.reslut ){
  var xiaomao = reslut[0]; 
  //小猫这个变量是一个Cat的实例,它是从Cat集合中find出来的,所以find出来以后,就是Cat的一个实例。 //不但创建的是猫的实例, find查询出来的也是猫的实例。
  xiaomao.age = 10;
  xiaomao.save();
})

Schema

定义文档结构支持的类型

String
Number
Date
Buffer
Boolean
Mixed
ObjectId
Array

定义对象(methods)方法

实例出来的对象,使用的方法, 实例来调用。

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/mlln');
var db = mongoose.connection;

db.on('open',function ( callback ) {
  console.log('数据库成功打开');
});

var animalSchema = new mongoose.Schema({
  'name': String,
  'type': String
});


animalSchema.methods.zhaotonglei = function ( cb ) {
  this.model('Animal').find({'type': this.type},cb);
}

var Animal = mongoose.model('Animal',animalSchema);
 
//module.exports = Blog;

/*Animal.create({'name': '汤姆','type': '猫'});
Animal.create({'name': 'imim','type': '猫'});
Animal.create({'name': '小白','type': '狗'});
Animal.create({'name': '加菲猫','type': '猫'});
Animal.create({'name': 'snoopy','type': '狗'});
*/

//blog.save();

Animal.findOne({'name': 'imim'},function ( err,reslut ) {
  var dog = reslut;
  dog.zhaotonglei(function ( err,resluts ) {
    console.log( resluts );
  });
});

model文档操作

构造函数

构造函数, 参数1:集合名称, 参数2:Schema实例

db.model(“test1”, TestSchema );

查询

查询, 参数1忽略,或为空对象则返回所有集合文档

model.find({}, callback);
model.find({},field,callback);
//过滤查询,参数2: {‘name':1, ‘age':0} 查询文档的返回结果包含name , 不包含age.(_id默认是1)
model.find({},null,{limit:20});
//过滤查询,参数3: 游标操作 limit限制返回结果数量为20个,如不足20个则返回所有.
model.findOne({}, callback);
//查询找到的第一个文档
model.findById(‘obj._id', callback);
//查询找到的第一个文档,同上. 但是只接受 __id 的值查询

创建

创建, 在集合中创建一个文档

Model.create(文档数据, callback))

更新

更新,参数1: 查询条件, 参数2: 更新对象,可以使用MondoDB的更新修改器

Model.update(conditions, update, function(error)

删除

删除, 参数1: 查询条件

Model.remove(conditions,callback);

希望本文所述对大家node.js程序设计有所帮助。

Javascript 相关文章推荐
javascript html 静态页面传参数
Apr 10 Javascript
让iframe子窗体取父窗体地址栏参数(querystring)
Oct 13 Javascript
JS实现简易图片轮播效果的方法
Mar 25 Javascript
详解JavaScript权威指南之对象
Sep 27 Javascript
基于jQuery实现Accordion手风琴自定义插件
Oct 13 Javascript
jQuery点击导航栏选中更换样式的实现代码
Jan 23 Javascript
详解JavaScript中return的用法
May 08 Javascript
微信小程序 标签传入数据
May 08 Javascript
vue实现选项卡及选项卡切换效果
Apr 24 Javascript
原生JS实现动态添加新元素、删除元素方法
May 05 Javascript
Angular8 实现table表格表头固定效果
Jan 03 Javascript
uniapp引入支付宝原生扫码插件步骤详解
Jul 23 Javascript
Node Express用法详解【安装、使用、路由、中间件、模板引擎等】
May 13 #Javascript
Node 模块原理与用法详解
May 13 #Javascript
JavaScript oncopy事件用法实例解析
May 13 #Javascript
JavaScript 正则应用详解【模式、欲查、反向引用等】
May 13 #Javascript
JavaScript 引用类型实例详解【数组、对象、严格模式等】
May 13 #Javascript
Node.js API详解之 module模块用法实例分析
May 13 #Javascript
JS如何实现手机端输入验证码效果
May 13 #Javascript
You might like
Php Image Resize图片大小调整的函数代码
2011/01/17 PHP
php缓冲输出实例分析
2015/01/05 PHP
postfixadmin忘记密码后的修改密码方法详解
2016/07/20 PHP
php中让人头疼的浮点数运算分析
2016/10/10 PHP
PHP+Redis 消息队列 实现高并发下注册人数统计的实例
2018/01/29 PHP
Thinkphp5框架实现获取数据库数据到视图的方法
2019/08/14 PHP
Ruffy javascript 学习笔记
2009/11/30 Javascript
详谈javascript异步编程
2016/02/21 Javascript
JS获取多维数组中相同键的值实现方法示例
2017/01/06 Javascript
微信小程序之圆形进度条实现思路
2018/02/22 Javascript
nodejs基于express实现文件上传的方法
2018/03/19 NodeJs
Vue iview-admin框架二级菜单改为三级菜单的方法
2018/07/03 Javascript
Node.js实现简单的爬取的示例代码
2019/06/25 Javascript
这15个Vue指令,让你的项目开发爽到爆
2019/10/11 Javascript
对layui数据表格动态cols(字段)动态变化详解
2019/10/25 Javascript
[02:25]专访DOTA2负责人Erik 国际邀请赛暂不会离开西雅
2014/07/21 DOTA
Python回调函数用法实例详解
2015/07/02 Python
关于Django外键赋值问题详解
2017/08/13 Python
用python统计代码行的示例(包括空行和注释)
2018/07/24 Python
python排序函数sort()与sorted()的区别
2018/09/18 Python
python从子线程中获得返回值的方法
2019/01/30 Python
python os.fork() 循环输出方法
2019/08/08 Python
pytorch中torch.max和Tensor.view函数用法详解
2020/01/03 Python
PyTorch学习:动态图和静态图的例子
2020/01/06 Python
Matplotlib 折线图plot()所有用法详解
2020/07/28 Python
CSS的pointer-events属性详细介绍(作用和注意事项)
2014/04/23 HTML / CSS
Footshop罗马尼亚:最好的运动鞋选择
2019/09/10 全球购物
大学生四个方面的自我评价
2013/09/19 职场文书
元旦标语大全
2014/10/09 职场文书
项目安全员岗位职责
2015/02/15 职场文书
教师“一帮一”结对子活动总结
2015/05/07 职场文书
2015年重阳节活动主持词
2015/07/30 职场文书
成功的商业计划书这样写才最靠谱
2019/07/12 职场文书
《语言的突破》读后感3篇
2019/12/12 职场文书
goland 恢复已更改文件的操作
2021/04/28 Golang
人民币符号
2022/02/17 杂记