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 setTimeout和setInterval的使用方法 说明
Mar 25 Javascript
不同的jQuery API来处理不同的浏览器事件
Dec 09 Javascript
探讨JavaScript中的Rest参数和参数默认值
Jul 29 Javascript
借助FileReader实现将文件编码为Base64后通过AJAX上传
Dec 24 Javascript
使用angularjs创建简单表格
Jan 21 Javascript
解析如何利用iframe标签以及js制作时钟
Dec 08 Javascript
基于Javascript实现的不重复ID的生成器
Dec 25 Javascript
Vue自定义图片懒加载指令v-lazyload详解
Dec 31 Javascript
vue组件之Alert的实现代码
Oct 17 Javascript
微信小程序WebSocket实现聊天对话功能
Jul 06 Javascript
详解微信小程序之提高应用速度小技巧
Jan 07 Javascript
vue3语法糖内的defineProps及defineEmits
Apr 14 Vue.js
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
php5.3 不支持 session_register() 此函数已启用的解决方法
2013/11/12 PHP
php使用curl检测网页是否被百度收录的示例分享
2014/01/31 PHP
推荐几个开源的微信开发项目
2014/12/28 PHP
Laravel 5框架学习之数据库迁移(Migrations)
2015/04/08 PHP
PHP中非常有用却鲜有人知的函数集锦
2019/08/17 PHP
PHP如何解决微信文章图片防盗链
2020/12/09 PHP
js之onload事件的一点使用心得
2013/08/14 Javascript
JavaScrip实现PHP print_r的数功能(三种方法)
2013/11/12 Javascript
jQuery中noConflict()用法实例分析
2015/02/08 Javascript
js判断数组key是否存在(不用循环)的简单实例
2016/08/03 Javascript
详解nodejs微信公众号开发——6.自定义菜单
2017/04/13 NodeJs
angular bootstrap timepicker TypeError提示怎么办
2017/06/13 Javascript
vue.js element-ui validate中代码不执行问题解决方法
2017/12/18 Javascript
快速了解vue-cli 3.0 新特性
2018/02/28 Javascript
vue.js 获取select中的value实例
2018/03/01 Javascript
在vue中实现点击选择框阻止弹出层消失的方法
2018/09/15 Javascript
[01:50]《我与DAC》之玩家:iG夺冠时的那面红旗
2018/03/29 DOTA
使用python解析xml成对应的html示例分享
2014/04/02 Python
在Python中使用HTML模版的教程
2015/04/29 Python
Python实现模拟分割大文件及多线程处理的方法
2017/10/10 Python
6行Python代码实现进度条效果(Progress、tqdm、alive-progress​​​​​​​和PySimpleGUI库)
2020/01/06 Python
python如何实时获取tcpdump输出
2020/09/16 Python
html5中svg canvas和图片之间相互转化思路代码
2014/01/24 HTML / CSS
编写一个类体现构造,公有,私有方法,静态,私有变量
2013/08/10 面试题
电气专业应届生求职信
2013/11/01 职场文书
采购员岗位职责
2013/11/15 职场文书
上班打牌检讨书
2014/02/07 职场文书
国贸专业的职业规划书
2014/03/15 职场文书
海上钢琴师观后感
2015/06/03 职场文书
泰坦尼克号观后感
2015/06/04 职场文书
小学英语教师研修感悟
2015/11/18 职场文书
2016年基层党组织公开承诺书
2016/03/25 职场文书
幼师必备:幼儿园期末教师评语50条
2019/11/01 职场文书
Springboot如何使用logback实现多环境配置?
2021/06/16 Java/Android
python实现会员管理系统
2022/03/18 Python
golang为什么要统一错误处理
2022/04/03 Golang