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 时间间隔计算的函数(间隔天数)
Nov 15 Javascript
javascript自启动函数的问题探讨
Oct 05 Javascript
JavaScript数值转换的三种方式总结
Jul 31 Javascript
JQuery设置时间段下拉选择实例
Dec 30 Javascript
bootstrap实现弹窗和拖动效果
Jan 03 Javascript
解析javascript瀑布流原理实现图片滚动加载
Mar 10 Javascript
JS简单实现禁止访问某个页面的方法
Sep 13 Javascript
angularjs实现柱状图动态加载的示例
Dec 11 Javascript
vue axios请求频繁时取消上一次请求的方法
Nov 10 Javascript
angular4应用中输入的最小值和最大值的方法
May 17 Javascript
vue微信分享插件使用方法详解
Feb 18 Javascript
javascript开发实现贪吃蛇游戏
Jul 31 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
discuz的php防止sql注入函数
2011/01/17 PHP
初识Laravel
2014/10/30 PHP
php截取指定2个字符之间字符串的方法
2015/04/15 PHP
在 Laravel 中 “规范” 的开发短信验证码发送功能
2017/10/26 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
2019/04/09 PHP
PHPstorm激活码2020年5月13日亲测有效
2020/09/17 PHP
XRegExp 0.2: Now With Named Capture
2007/11/30 Javascript
Jquery操作Select 简单方便 一个js插件搞定
2009/11/12 Javascript
ExtJs GridPanel简单的增删改实现代码
2010/08/26 Javascript
jquery 实现input输入什么div图层显示什么
2014/06/15 Javascript
使用JavaScript开发IE浏览器本地插件实例
2015/02/18 Javascript
JS 对象属性相关(检查属性、枚举属性等)
2015/04/05 Javascript
30分钟快速掌握Bootstrap框架
2016/05/24 Javascript
js控件Kindeditor实现图片自动上传功能
2020/07/20 Javascript
JavaScript中的await/async的作用和用法
2016/10/31 Javascript
微信公众平台开发教程(五)详解自定义菜单
2016/12/02 Javascript
jQuery基本筛选选择器实例代码
2017/02/06 Javascript
使用vue框架 Ajax获取数据列表并用BootStrap显示出来
2017/04/24 Javascript
jquery点赞功能实现代码 点个赞吧!
2020/05/29 jQuery
BootStrap表单控件之文本域textarea
2017/05/23 Javascript
JavaScript数据类型的存储方法详解
2017/08/25 Javascript
WebPack配置vue多页面的技巧
2018/05/15 Javascript
详解Vue中使用Echarts的两种方式
2018/07/03 Javascript
微信小程序开发技巧汇总
2019/07/15 Javascript
Vue中遍历数组的新方法实例详解
2019/07/21 Javascript
JavaScript如何把两个数组对象合并过程解析
2019/10/10 Javascript
Python新手实现2048小游戏
2015/03/31 Python
12步教你理解Python装饰器
2016/02/25 Python
python实现将多个文件分配到多个文件夹的方法
2019/01/07 Python
Python实现非正太分布的异常值检测方式
2019/12/09 Python
详解pandas绘制矩阵散点图(scatter_matrix)的方法
2020/04/23 Python
Python3爬虫里关于Splash负载均衡配置详解
2020/07/10 Python
35款精致的 CSS3 和 HTML5 网页模板 推荐
2012/08/03 HTML / CSS
css3进阶之less实现星空动画的示例代码
2019/09/10 HTML / CSS
STAY JAPAN台湾:预订日本民宿
2018/07/22 全球购物
《藏戏》教学反思
2016/02/23 职场文书