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 相关文章推荐
ExtJS TabPanel beforeremove beforeclose使用说明
Mar 31 Javascript
根据对象的某一属性进行排序的js代码(如:name,age)
Aug 10 Javascript
图片延迟加载的实现代码(模仿懒惰)
Mar 29 Javascript
让angularjs支持浏览器自动填表
Nov 10 Javascript
Javascript 对cookie操作详解及实例
Dec 29 Javascript
Vuex之理解Store的用法
Apr 19 Javascript
vue组件中的数据传递方法
May 14 Javascript
.vue文件 加scoped 样式不起作用的解决方法
May 28 Javascript
详解vuex持久化插件解决浏览器刷新数据消失问题
Apr 15 Javascript
微信打开网址添加在浏览器中打开提示的办法
May 20 Javascript
axios实现文件上传并获取进度
Mar 25 Javascript
React实现评论的添加和删除
Oct 20 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安装攻略:常见问题解答(二)
2006/10/09 PHP
php生成数组的使用示例 php全组合算法
2014/01/16 PHP
不使用php api函数实现数组的交换排序示例
2014/04/13 PHP
php提高网站效率的技巧
2015/09/29 PHP
总结一些PHP中好用但又容易忽略的小知识
2017/06/02 PHP
PHP strripos函数用法总结
2019/02/11 PHP
JS面向对象、prototype、call()、apply()
2009/05/14 Javascript
读jQuery之十二 删除事件核心方法
2011/07/31 Javascript
jquery 获取自定义属性(attr和prop)的实现代码
2012/06/27 Javascript
onkeyup,onkeydown和onkeypress的区别介绍
2013/10/21 Javascript
jQuery中:submit选择器用法实例
2015/01/03 Javascript
JS+HTML5手机开发之滚动和惯性缓动实现方法分析
2016/06/12 Javascript
利用浮层使select不可选的实现方法
2016/12/03 Javascript
js 文字超出长度用省略号代替,鼠标悬停并以悬浮框显示实例
2016/12/06 Javascript
浅谈js-FCC算法Friendly Date Ranges(详解)
2017/04/10 Javascript
node 利用进程通信实现Cluster共享内存
2017/10/27 Javascript
vue解决跨域路由冲突问题思路解析
2017/11/03 Javascript
vue结合Echarts实现点击高亮效果的示例
2018/03/17 Javascript
vue filter 完美时间日期格式的代码
2019/08/14 Javascript
koa-passport实现本地验证的方法示例
2020/02/20 Javascript
jQuery实现B2B网站后台管理系统侧导航
2020/07/08 jQuery
vue移动端下拉刷新和上滑加载
2020/10/27 Javascript
布同自制Python函数帮助查询小工具
2011/03/13 Python
python中while循环语句用法简单实例
2015/05/07 Python
Python读取Excel的方法实例分析
2015/07/11 Python
pycharm打开命令行或Terminal的方法
2019/01/16 Python
PyQt4实时显示文本内容GUI的示例
2019/06/14 Python
HTML5的video标签的浏览器兼容性增强方案分享
2016/05/19 HTML / CSS
Original Penguin英国官方网站:美国著名休闲时装品牌
2016/10/30 全球购物
中专自我鉴定范文
2013/10/16 职场文书
运动会稿件50字
2014/02/17 职场文书
新闻编辑求职信
2014/04/09 职场文书
医药公司采购员岗位职责
2014/09/12 职场文书
社区学习党的群众路线教育实践活动心得体会
2014/11/03 职场文书
 Python 中 logging 模块使用详情
2022/03/03 Python
JAVA springCloud项目搭建流程
2022/05/11 Java/Android