MongoDB的基本使用

MongoDB特点:

  • 使用BSON存储数据
  • 支持相对丰富的查询操作(相对其他nosql数据库)
  • 支持索引
  • 副本集(支持多个实例/多个服务器运行同个数据库)
  • 分片(数据库水平扩展)
  • 无模式(同个数据文档中的数据可以不一样)
  • 部署简单方便(默认无密码,也带来安全问题)

服务的启动:

mongod

(此前需要安装了mongo数据库,并创建过mongodb的目录:$ mkdir -p /data/db)

启动mongodb后,可以使用mongo命令行来操作数据库,或使用Robomongo这样的GUI客户端。

Mongo命令行工具操作MongoDB:

使用一个数据库:(mongodb不需要预先创建数据库,当给一个数据库写入内容时会自动创建)

$ use mytest

插入数据(给mytest数据库下的users集合插入一条文档)

$ db.users.insert({"username": "nuanfeng"})

然后可以查看数据库和集合:

$ show dbs
$ show collections

查看users集合中的所有文档:

$ db.users.find()

再添加一条数据:(mongodb是无模式的,所以可以添加不同格式的数据)

$ db.users.insert({"username": "Zoe", "group": "reporter"})

再用db.users.find()查看,如下:

查看数据的数量:

$ db.users.find().count()

根据id查询数据:

$ db.users.find({"_id": ObjectId("584bc73ea635e489676cf5db")})

更新数据: (匹配到的第一条)

$ db.users.update({"username": "Zoe"}, {$set: {"group": "writer"}})

更新数据: (匹配到的所有)

$ db.users.update({"username": "Zoe"}, {$set: {"group": "writer"}}, {multi: true})

用save()也可以修改数据:(必须根据‘_id’,会直接替换掉原来的数据)

db.users.save({"_id": ObjectId("584bc73ea635e489676cf5db"), "group": "reporter"})

删除满足条件的所有:

$ db.users.remove({"group": "reporter"});

删除满足条件的第一条:

$ db.users.remove({"group": "reporter"}, true);

删除集合中的所有文档:

$ db.users.remove({})

删除整个集合(所有文档和索引)

$ db.users.drop()

使用Mongoose模块操作MongoDB

模块介绍

Mongoose是将nodejs的对象和MongoDB中的文档对应的一个模块。

Mongoose既支持强模式,也支持无模式。

安装mongoose:

$ npm install mongoose

先看一下最终的目录结构:

配置与链接

链接的格式:(也可以省略用户名、密码、端口号)

var uri = 'mongodb://username:password@hostname:port/databasename'
mongoose.connect(uri);

Model与Schema

Model使nodejs对象和MongoDB中的文档相对应,Schema实现了Model的数据类型和结构的定义,从而在无模式的MongoDB中实现了模式化的存储。

model.js

/** 配置并链接MongoDB **/
var mongoose = require('mongoose');
var uri = 'mongodb://localhost/mongoose-base';mongoose.connect(uri);/** 创建Schema、创建Model **/
var BookSchema = new mongoose.Schema({name: String,author: String,publishTime: Date
});mongoose.model('Book', BookSchema);

创建文档

insert.js

var mongoose = require('mongoose');
require('./model.js');/** 获取Model,创建Book的实例 Entity **/
var Book = mongoose.model('Book');var book = new Book({name: 'MEAN Web Develop',author: 'Green',publishTime: new Date()
});book.author = 'Jim';    // 参数可以重新指定/** 插入数据 **/
book.save(function(err) {    // 执行保存,并查看返回情况console.log('save status:', err ? 'failed' : 'success');
})

简单查询

find.js

var mongoose = require('mongoose');
require('./model.js');var Book = mongoose.model('Book');/** 查询所有数据 **/
Book.find({}, function(err, docs) {if (err) {console.log('err:', err);return;}console.log(docs)
})

findOne.js

var mongoose = require('mongoose');
require('./model.js');var Book = mongoose.model('Book');/** 查询一条数据,并修改 **/
Book.findOne({author: 'Jim'}, function(err, doc) {if (err) {console.log('err:', err);return;}doc.author = 'James';doc.save();console.log('findOne result:', doc)
})

删除文档

remove.js

var mongoose = require('mongoose');
require('./model.js');var Book = mongoose.model('Book');Book.findOne({ author: 'Jim' }, function(err, doc) {if (err) {console.log('findOne err:', err);return;}if (doc) {doc.remove();}
})

条件语句

var mongoose = require('mongoose');
require('./model.js');var Book = mongoose.model('Book');var cond = {$or: [{author: 'Jim'},{author: 'James'}]
};
Book.find(cond, function(err, docs){if(err) {console.log('find by cond err:', err);}console.log('cond:', cond, 'result:', docs);
})

在Express项目中使用Mongoose

快速生成express应用

这里我们用express-generator来快速生成express应用(先安装好node、npm、express-generator、mongodb)

$ express mongooseExpress

先看下最终的项目结构图:

配置数据库并连接

新建config文件夹,用来放置数据库配置信息

config/config.js

module.exports = {mongodb: 'mongodb://localhost:27017/mongoose-test'
}

config/mongoose.js

var mongoose = require('mongoose');
var config = require('./config.js');module.exports = function() {var db = mongoose.connect(config.mongodb);require('../models/user.server.model.js');return db;
}

全局引入mongoose

在app.js的路由模块前引用刚才创建的mongoose配置信息(8,9两行)

 1 var express = require('express');
 2 var path = require('path');
 3 var favicon = require('serve-favicon');
 4 var logger = require('morgan');
 5 var cookieParser = require('cookie-parser');
 6 var bodyParser = require('body-parser');
 7
 8 var mongoose = require('./config/mongoose.js');
 9 var db = mongoose();
10
11 var index = require('./routes/index');
12 var users = require('./routes/users'); 

创建Schema和Model

新建models文件夹

/models/user.server.model.js

var mongoose = require('mongoose');var UserSchema = new mongoose.Schema({uid: Number,username: String,createTime: Date,lastLogin: Date
});mongoose.model('User', UserSchema);

编写数据库处理逻辑代码

我们直接在users路由模块中加入数据库存取操作的代码

/routes/users.js

 1 var express = require('express');
 2 var router = express.Router();
 3
 4 var mongoose = require('mongoose');
 5 var User = mongoose.model('User');
 6
 7 /* GET users listing. */
 8 router.get('/', function(req, res, next) {
 9   res.send('respond with a resource');
10 });
11
12 router.get('/test', function(req, res, next) {
13     var user = new User({
14         uid: 1,
15         username: 'nuanfeng'
16     })
17
18     user.save(function(err){
19         if(err) {
20             res.end('Error');
21             return next();
22         }
23
24         User.find({}, function(err, docs) {
25             if(err) {
26                 res.end('Error');
27                 return next();
28             }
29
30             res.json(docs);
31         })
32     })
33 })
34
35 module.exports = router;

运行node查看效果

$ node bin/www

然后在浏览器中访问:http://localhost:3000/users/test,就能往数据库中存入一条记录,并在当前页面返回它的json数据

转载于:https://www.cnblogs.com/woodk/p/6155955.html

Mongo基础使用,以及在Express项目中使用Mongoose相关推荐

  1. 在express项目中使用formidable multiparty实现文件上传

    安装 formidable,multiparty 模块 npm install formidable,multiparty –save -d 表单上传 <form id="addFor ...

  2. vue基础18(vue-cli脚手架项目中组件的使用)

    vue-cli脚手架项目中组件的使用 在webpack-simple模板中,包括webpck模板.一个.vue文件就是一个组件. 为什么会这样呢?因为webpack干活了!webpack的将我们所有的 ...

  3. 【idea基础知识】在maven项目中额外增加jar包

    不受MAVEN管理的方式 有些jar包比如odbc.jar无法通过maven直接下载到,如果有现成的jar包可以直接导入的话就方便多了. 如果不需要增加到maven配置中,则使用如下方式导入. 首先通 ...

  4. 浅谈 OneAPM 在 express 项目中的实践

    [编者按]OneAPM 运营团队,近日在 github 上发现了一篇文章,特别奉献给大家.本文作者王宇先生从2015年年初就开始使用我们的产品,也是OneAPM 的忠实用户. OneAPM 是一个优秀 ...

  5. express学习 - (1)环境配置与第一个express项目

    express学习 (1) 环境配置与第一个express项目 CSDN主页:jcLee95 邮箱:291148484@163.com [任务]: 安装express: 创建第一个express项目: ...

  6. Shiro框架在项目中的应用

    1.Shiro 框架简介 Shiro 概述 Shiro 是Apache公司推出一个权限管理框架,其内部封装了项目中认证,授权,加密,会话等逻辑操作,通过Shiro框架可以简化我们项目权限控制逻辑的代码 ...

  7. 数据库与身份认证(数据库的基本概念,安装并配置 MySQL,MySQL 的基本使用,在项目中操作 MySQL,前后端的身份认证)

    theme: channing-cyan 数据库与身份认证 1. 数据库的基本概念 1.1 什么是数据库 数据库(database)是用来组织.存储和管理数据的仓库. 当今世界是一个充满着数据的互联网 ...

  8. 【机器学习基础】在机器学习项目中该如何选择优化器

    作者:Philipp Wirth   编译:ronghuaiyang 导读 几种流行的优化器的介绍以及优缺点分析,并给出了选择优化器的几点指南. 本文概述了计算机视觉.自然语言处理和机器学习中常用的优 ...

  9. 在下列计算机应用项目中,属于过程控制应用领域的是,计算机基础试题.ppt

    计算机基础试题 计算机基础试题 选择题 1.世界上第一台电子数字计算机取名(??c??). A.UNIVAC????B.EDSAC????C.ENIAC????D.EDVAC 2.操作系统的作用是(? ...

最新文章

  1. 反编译与反汇编、C++编译过程,包括预编译--汇编--编译--链接
  2. JavaScript基础3——关于运算符
  3. 跟牛牛老师学python自动化的第四天
  4. 看完这一篇,再也不用担心 Git 的“黑魔法”
  5. jquery字符串转数组
  6. 2017年第八届蓝桥杯C/C++ A组国赛 —— 第一题:平方十位数
  7. object的classid收集
  8. 原生js、jQuery实现选项卡功能
  9. 【转】Net Framework,Net Core 和 Net Standard 区别
  10. HTML5的Histroy API
  11. 函数fun的功能是将s所指字符串_21 函数的简介
  12. NYOJ-单调递增子序列(二)(dp加二分)
  13. 图像处理——在Python中使用OpenCV显示图像
  14. 螺旋测微器b类不确定度_数控铣床G02、G03圆弧指令,还能作为螺旋插补用于油槽加工!...
  15. 如何构建config文件
  16. 数学建模常用方法讲解(一)
  17. 集成电路工艺专题复习
  18. ATX 双电源切换电路
  19. PV016R1K1T1NMMC派克变量柱塞泵
  20. 小王梦游记五---最美丽的湖

热门文章

  1. php接口调用教程,php接口调用
  2. html 消息通知功能,HTML5之消息通知的使用(Web Notification)
  3. mysql栏的范围外值,MySQL中各种字段的取值范围-数据库专栏,MySQL
  4. 智能视觉组赛博 -10赛后反馈
  5. 大学生智能汽车竞赛-讯飞智慧餐厅组别成绩公示!
  6. AI视觉组培训第二弹——入门篇
  7. 车坛刮起了一阵文艺风
  8. VMware虚拟机提示在该系统上全局禁用了虚拟机打印功能
  9. linux手机刷机包制作工具_刷GitHub提交记录工具制作
  10. python3调用函数len结果不返回字符串长度_Python通过len函数返回对象长度