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

  顺便官网地址是这个哦:http://mongoosejs.com/docs/guide.html

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

 首先来进入你项目的根目录下安装: 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 = new User({
uid: '',
uname: 'yaobo1',
upwd: '',
loginDate: new Date()
}) 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 忽略大小写,{<field>{$regex/pattern/i}},设置i选项后,模式中的字母会进行大小写不敏感匹配。
  • m 多行匹配模式,{<field>{$regex/pattern/,$options:'m'},m选项会更改^和$元字符的默认行为,分别使用与行的开头和结尾匹配,而不是与输入字符串的开头和结尾匹配。
  • x 忽略非转义的空白字符,{<field>:{$regex:/pattern/,$options:'m'},设置x选项后,正则表达式中的非转义的空白字符将被忽略,同时井号(#)被解释为注释的开头注,只能显式位于option选项中。
  • s 单行匹配模式{<field>:{$regex:/pattern/,$options:'s'},设置s选项后,会改变模式中的点号(.)元字符的默认行为,它会匹配所有字符,包括换行符(\n),只能显式位于option选项中。
使用$regex操作符时,需要注意下面几个问题:
  • i,m,x,s可以组合使用,例如:{name:{$regex:/j*k/,$options:"si"}}
  • 在设置索弓}的字段上进行正则匹配可以提高查询速度,而且当正则表达式使用的是前缀表达式时,查询速度会进一步提高,例如:{name:{$regex: /^joe/}
var User = require('./userInfo.js')

/*
查询操作
*/ function find() {
let wherestr = {uid: '1'} User.find(wherestr, function (err, res) {
if(err) {
console.log('err' + err);
} else {
console.log('res:' + res)
}
})
} /*
模糊查询
*/ function getRegex(){
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)
}
})
} /*
聚合查询
*/ function aggregate(){
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();

3.3 删除操作

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

function remove() {
let wherestr = {uid: '1'} User.remove(wherestr, function (er, res) {
if (er) {
console.log('er:', er)
}
if (res) {
console.log('res', res)
}
})
} remove();

3.4 更新操作

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

function update() {
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();

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

Nodejs学习笔记(二)--- 操作MongoDB数据库的更多相关文章

  1. nodejs学习笔记二——链接mongodb

    a.安装mongoose库用来链接mongodb数据库 安装mongodb数据库参考mongodb安装 前言(怨言) 本来是想安装mongodb库来链接mongodb的,命令行到nodejs工程目录: ...

  2. MongoDB学习笔记:Python 操作MongoDB

    MongoDB学习笔记:Python 操作MongoDB   Pymongo 安装 安装pymongopip install pymongoPyMongo是驱动程序,使python程序能够使用Mong ...

  3. Javascript学习笔记二——操作DOM

    Javascript学习笔记 DOM操作: 一.GetElementById() ID在HTML是唯一的,getElementById()可以定位唯一的一个DOM节点 二.querySelector( ...

  4. 【MongoDB学习之二】MongoDB数据库、文档、集合、元数据

    环境 MongoDB 4.0 CentOS6.5_x64 一.连接语法格式: mongodb://[username:password@]host1[:port1][,host2[:port2],.. ...

  5. C#学习笔记---C#操作SQL数据库

    C#操作SQL数据库 Connection(连接)对象 连接字符串: 形式1.”server=;uid=;pwd=;database=” 形式2.”server=;Intergrated Securi ...

  6. python学习笔记之——操作mysql数据库

    Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: ...

  7. Redis学习笔记二:单机数据库的实现

    1. 数据库 服务器中的数据库 Redis服务器将所有数据库都保存在服务器状态redis.h/redisServer结构的db数组中,db数组的每个项都是一个redis.h/redisDb结构,每个r ...

  8. nodejs学习笔记二:解析express框架项目文件

    上一章介绍了如何去创建一个express框架的工程项目,这章介绍一下express框架下的文件和用法解析,上一张我们创建的工程项目结构图如下: models是不属于原工程项目结构,为了实现数据模型后添 ...

  9. nodejs学习笔记<二>简单的node服务器

    在环境搭建好后,就可以开始动手架设(node驱动)一个简单的web服务器. 首先,nodejs还是用js编写.先来看一段node官网上的实例代码. var http = require('http') ...

  10. nodejs学习笔记<二> 使用node创建基础服务器

    创建服务器的 server.js 内容. var http = require("http"); // 引用http模块 http.createServer(function(re ...

随机推荐

  1. Js错误: obj.parents is not a function

    代码:      (1)  <div class="ViewMore" id="viewmore${i}" onclick="CLICK(thi ...

  2. IOTutility 一个轻量级的 IOT 基础操作库

    IOTutility 一个轻量级的 IOT 基础操作库 Base utility for IOT devices, networking, controls etc... IOTutility 的目的 ...

  3. Python爬虫系列 - 初探:爬取旅游评论

    Python爬虫目前是基于requests包,下面是该包的文档,查一些资料还是比较方便. http://docs.python-requests.org/en/master/ POST发送内容格式 爬 ...

  4. c语言异常处理机制

    异常处理机制:setjmp()函数与longjmp()函数 C标准库提供两个特殊的函数:setjmp() 及 longjmp(),这两个函数是结构化异常的基础,正是利用这两个函数的特性来实现异常. 所 ...

  5. C++与C#的多态

    C++ 多态 多态按字面的意思就是多种形态.当类之间存在层次结构,并且类之间是通过继承关联时,就会用到多态. C++ 多态意味着调用成员函数时,会根据调用函数的对象的类型来执行不同的函数. 下面的实例 ...

  6. 20155211 2016-2017-2 《Java程序设计》第五周学习总结

    20155211 2016-2017-2 <Java程序设计>第五周学习总结 教材学习内容总结 这周学习了第八章和第九章的内容.第八章和第九章主要就是介绍一些类的应用,我先把教材上的内容看 ...

  7. # 学号20155308 2006-2007-2 《Java程序设计》第4周学习总结

    学号20155308 2006-2007-2 <Java程序设计>第4周学习总结 教材学习内容总结 6.1 何谓继承 继承基本上就是避免多个类间重复定义共同行为. 许多类之间具有相同的属性 ...

  8. Nginx入门篇(三)之虚拟主机配置

    一.虚拟主机概念 所谓虚拟主机,在Web服务当中就是一个独立的网站站点,这个站点对应独立的域名(也有可能是IP或者端口),具有独立的程序和资源目录,可以独立地对外提供服务供用户访问. 这个独立的站点在 ...

  9. android studio提交到开源git时出现:fatal: refusing to merge unrelated histories的解决办法

    创建本地库和fetch远程分支这些前面的步骤这里略过.可以自行百度. 解决办法: 1.cmd进入项目的根目录. 2.执行下面的命令:git pull origin master --allow-unr ...

  10. 视觉SLAM中的深度估计问题

    一.研究背景 视觉SLAM需要获取世界坐标系中点的深度. 世界坐标系到像素坐标系的转换为(深度即Z): 深度的获取一共分两种方式: a)主动式 RGB-D相机按照原理又分为结构光测距.ToF相机 To ...