js how to use php mongoose,Nodejs学习笔记(二)--- 操作MongoDB数据库

最近看了一些关于mongodb的文章,然后就想知道nodeJS是怎么连接的所以我就尝试去了解了一波(这个菜鸟驿站这个网站还不错,虽然知识文档不是最新的,但是还是蛮好的;

好了,让我们来进入今天的主题:

首先来进入你项目的根目录下安装: npm install  mongoose

关于mongoose, 有三个概念:Schema、Model 和 Entity

Schema: 一种以文件形式存储的数据库模型框架,不具备操作数据库的能力。

{ 每个Schema会映射到MongoDB中的一个给定的集合(Collection)}

Model: 由Schema发布的模型,具有抽象的属性和行为,可以直接操作数据库。

{ 在mongoose中,所有的数据都是一种模型(Model),每个模型都映射到MOngDB的一个集合,并且定义了该集合文件结构}

Entity: 由Model创建的实体,它可以直接操作数据库。

一直想用下这个数据的,最近终于得偿所愿。数据库的使用,我觉得首先是从增删改查开始,然后才去像更加复杂的地步去卖家

首先如何去获取他的连接

创建db.js , 可以直接通过node db.js 命名去观察连接的效果

一 建立连接

var mongoose = require('mongoose'),

DB_URL= 'mongodb://127.0.0.1:27017/Test';//连接

mongoose.connect(DB_URL);//测试连接是否成功

mongoose.connection.on('connected', function() {

console.log('my mongodb connection success !!!')

})//连接异常的情况

mongoose.connection.on('error', function(er) {

console.log('connection error: ' +er);

})//连接断开

mongoose.connection.on('disconnected', function() {

console.log('mongogdb disconnection')

})

module.exports= mongoose;

二: 创建数据模型

创建Schema ( 有点类似创建实例属性) 并建立Model

// 获取连接

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

Schema = mongoose.Schema;

// 创建用户

var userInfo = new Schema({

uid: {type: String},

uname: {type: String},

upwd: {type: String},

loginDate: {type: Date}

})

// 将定义好的schema 转换为model

module.exports = mongoose.model('userInfo', userInfo);

三 对数据库操作

3.1 插入操作:

var User = require('./userInfo.js')/*插入操作*/function insert() {var userInfo = newUser({

uid:'1',

uname:'yaobo1',

upwd:'123',

loginDate:newDate()

})

userInfo.save(function (err, res) {if(err) {

console.log('err' +err);

}else{

console.log('res:' +res)

}

})

// 插入多条

userInfo.insertMany([], function (err, res) {

})

} insert();

3.2 查询操作:

这里在做模糊查询的时候是使用正则表达式来判断的

$regex操作符的使用

$regex操作符中的option选项可以改变正则匹配的默认行为,它包括i, m, x以及S四个选项,其含义如下

i 忽略大小写,{{$regex/pattern/i}},设置i选项后,模式中的字母会进行大小写不敏感匹配。

m 多行匹配模式,{{$regex/pattern/,$options:'m'},m选项会更改^和$元字符的默认行为,分别使用与行的开头和结尾匹配,而不是与输入字符串的开头和结尾匹配。

x 忽略非转义的空白字符,{:{$regex:/pattern/,$options:'m'},设置x选项后,正则表达式中的非转义的空白字符将被忽略,同时井号(#)被解释为注释的开头注,只能显式位于option选项中。

s 单行匹配模式{:{$regex:/pattern/,$options:'s'},设置s选项后,会改变模式中的点号(.)元字符的默认行为,它会匹配所有字符,包括换行符(\n),只能显式位于option选项中。

使用$regex操作符时,需要注意下面几个问题:

i,m,x,s可以组合使用,例如:{name:{$regex:/j*k/,$options:"si"}}

在设置索弓}的字段上进行正则匹配可以提高查询速度,而且当正则表达式使用的是前缀表达式时,查询速度会进一步提高,例如:{name:{$regex: /^joe/}

417bdaa95b19b71409d4b7d7f312fc60f85.jpg

d50e988235c78d989021f27d079935068c7.jpg

var User = require('./userInfo.js')/*查询操作*/

functionfind() {

let wherestr= {uid: '1'}

User.find(wherestr,function(err, res) {if(err) {

console.log('err' +err);

}else{

console.log('res:' +res)

}

})

}/*模糊查询*/

functiongetRegex(){var wherestr = {uname: {$regex: /yaobo/m}}

console.log(wherestr);

User.find(wherestr,function(err, res) {if(err) {

console.log('err' +err);

}else{

console.log('res:' +res)

}

})

}/*聚合查询*/

functionaggregate(){var wherestr = [{$group: {_id: '$uname', num: {$sum: 1}}}]

console.log(wherestr);

User.aggregate(wherestr,function(err, res) {if(err) {

console.log('err' +err);

}else{

console.log('res:' +JSON.stringify(res))

}

})

}//find();

//http://blog.csdn.net/u022812849/article/details/51314810

//getRegex();

aggregate();

View Code

3.3 删除操作

ce89145c70f93b8c78ee6f9ea7e72f763aa.jpg

5bbb34dabe3f0d1da7c1e642e1054f34985.jpg

var User = require('./userInfo.js')functionremove() {

let wherestr= {uid: '1'}

User.remove(wherestr,function(er, res) {if(er) {

console.log('er:', er)

}if(res) {

console.log('res', res)

}

})

}

remove();

View Code

3.4 更新操作

6e6a71c89e9e9d7af0d8a634b7a42c8b0c9.jpg

a504c3ac17738bffe2acbc7b836a805f6b3.jpg

var User = require('./userInfo.js')functionupdate() {var wherestr = {uname: 'yaobo1'}var updatestr = {uname: '神奇的造物主'}

User.update(wherestr, updatestr,function(er , res) {if(er) {

console.log('er:', er)

}if(res) {

console.log('res', res)

}

})

}

update();

View Code

其实这样写下来就会发现,掌握了结构之后,就是知道如何去使用nodejs去操作mongodb, 可能有些复杂的没写(后续有好的东西,再往上加),不过基本语句掌握了,掌握mongdb的语言就尤为重要了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值