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 相关文章推荐
js文件中调用js的实现方法小结
Oct 23 Javascript
JavaScript中使用构造器创建对象无需new的情况说明
Mar 01 Javascript
iframe子页面获取父页面元素的方法
Nov 05 Javascript
js与css实现弹出层覆盖整个页面的方法
Dec 13 Javascript
JavaScript实现鼠标点击后层展开效果的方法
May 13 Javascript
thinkphp实现无限分类(使用递归)
Dec 19 Javascript
基于JavaScript实现图片连播和联级菜单实例代码
Jul 28 Javascript
react+redux的升级版todoList的实现
Dec 18 Javascript
如何使用VuePress搭建一个类型element ui文档
Feb 14 Javascript
vue实现移动端图片上传功能
Dec 23 Javascript
基于JavaScript实现简单抽奖功能代码实例
Oct 20 Javascript
原生JS实现分页
Apr 19 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 fputcsv命令 写csv文件遇到的小问题(多维数组连接符)
2011/05/24 PHP
php 文本文件的读取效率
2012/02/10 PHP
支持生僻字且自动识别utf-8编码的php汉字转拼音类
2014/06/27 PHP
apache中为php 设置虚拟目录
2014/12/17 PHP
基于php实现的验证码小程序
2016/12/13 PHP
基于JQuery实现鼠标点击文本框显示隐藏提示文本
2012/02/23 Javascript
javascript 判断中文字符长度的函数代码
2012/08/27 Javascript
5个JavaScript经典面试题
2014/10/13 Javascript
node.js中的fs.createWriteStream方法使用说明
2014/12/17 Javascript
SyntaxHighlighter 3.0.83使用笔记
2015/01/26 Javascript
使用jQuery给input标签设置默认值
2016/06/20 Javascript
d3.js实现简单的网络拓扑图实例代码
2016/11/06 Javascript
Vue.js实现移动端短信验证码功能
2017/03/29 Javascript
JavaScript实现短信倒计时60s
2017/10/09 Javascript
js实时监控文本框输入字数的实例代码
2018/01/18 Javascript
JavaScript 点击触发复制功能实例详解
2018/11/02 Javascript
解决 viewer.js 动态更新图片导致无法预览的问题
2019/05/14 Javascript
JavaScript数组去重实现方法小结
2020/01/17 Javascript
javascript中的with语句学习笔记及用法
2020/02/17 Javascript
JS正则表达式常见函数与用法小结
2020/04/13 Javascript
基于Python Shell获取hostname和fqdn释疑
2016/01/25 Python
Python优先队列实现方法示例
2017/09/21 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
2018/01/29 Python
Selenium鼠标与键盘事件常用操作方法示例
2018/08/13 Python
Python性能分析工具Profile使用实例
2019/11/19 Python
Python3标准库之dbm UNIX键-值数据库问题
2020/03/24 Python
Python selenium爬取微信公众号文章代码详解
2020/08/12 Python
Python JSON常用编解码方法代码实例
2020/09/05 Python
数百万免费的图形资源:Freepik
2020/09/21 全球购物
英国著名药妆店:Superdrug
2021/02/13 全球购物
自我评价格式
2014/01/06 职场文书
房产公证书范本
2014/04/10 职场文书
2014年环保局工作总结
2014/12/11 职场文书
个人先进事迹材料范文
2014/12/29 职场文书
计划生育责任书
2015/05/09 职场文书
创业计划书之韩国烧烤店
2019/09/19 职场文书