MongoDB 数据库

1、MongoDB vs. MySQL 及其概念讲解
MongoDB是一个基于分布式文件存储的数据库,由C++编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。
特点:高性能、易部署、易使用、存储数据非常方便。相关术语:
 database 数据库
 collection 集合
 document 文档
 field 域
 index 索引
 primary_key 自动地使用_id字段作为主键文档:即键值对(BSON,二进制的JSON),文档中不需要设置对等的字段,并且相同字段的值可以是不同的数据类型,这是与关系型数据库有很大的区别。
 示例:{"_id": ObjectId{“s232323232”}, name: geekxia, age: 20}集合:集合是文档的组,集合存在于数据库中,集合中没有固定的数据结构。但同一个集合中的文档通常有一定的关联性。
MongoDB的数据类型:
 String
 Integer
 Boolean
 Double
 Min/Max keys
 Array
 Timestamp
 Object
 Null
 Symbol
 Date
 Object ID
 Binary Data
 Code
 Regular expression
 2、使用 mongo shell,常用命令
1、帮助命令
 help
 db.help()
 db.test.help()
 db.test.find().help()2、数据库操作命令
 show dbs
 use dbname 切换数据库
 db / db.getName() 查看当前数据库名称
 db.stats() 显示当前DB的状态
 db.version() 查看当前DB的版本
 db.getMongo() 查看当前DB的连接的主机地址
 db.dropDatabase() 删除当前DB3、创建数据库和集合
 use project 不存在就创建,存在就切换至
 db.createCollection(‘user’) // 创建user集合
 db.createCollection(‘music’, {size:20,capped:true,max:100}) 创建固定容量的集合
 show dbs
 show collections / db.getCollectionNames()
 db.user.isCapped() 判断集合是否为定容量
 db.getCollection(‘music’) 获取指定集合
 db.printCollectionStats() 打印指定集合的状态4、集合中的文档操作:
 db.user.insertOne({}) 向集合中插入文档
 db.user.insertMany([{},{}])
 db.user.save({})
db.user.updateOne({"name":"geekxia"}, {$set:{"age":100}})
db.user.updateMany({},{$set:{}})

db.user.deleteOne({"name":"jiaming"})
db.user.deleteMany()
db.user.remove({})   // 要指出删除的条件

db.user.find()
5、文档操作的综合示例
 db.user.findAndModify({
 query: {age: {KaTeX parse error: Expected 'EOF', got '}' at position 8: gte: 25}̲}, sort: {age…set:{name:‘a’},KaTeX parse error: Expected 'EOF', got '}' at position 12: inc:{age:2}}̲, remove: tru…gte: 25}},
 sort: {age: -1},
 update: {inc:{age:2}},
 remove: true
 });6、聚集集合查询
 db.user.find() 查询所有记录
 db.user.distinct(‘name’) 以name字段去重查询
 db.user.find({age:22}) 查询age=22的记录
 db.user.find({age:{KaTeX parse error: Expected 'EOF', got '}' at position 7: gt: 22}̲}) 查询age>22的记…lt: 22}}) 查询age<22的记录
 db.user.find({age:{KaTeX parse error: Expected 'EOF', got '}' at position 8: gte: 22}̲}) 查询age>=22的…lte: 22}}) 查询age<=22的记录
 db.user.find({age:{$gte:20, KaTeX parse error: Expected 'EOF', got '}' at position 7: lte:30}̲}) 查询age>=20 &…gt:20}},{name:1,age:1}) 查询age>20的记录,只返回name和age字段
 db.user.find().sort({age:1}) 按age进行升序排列
 db.user.find().sort({age:-1}) 按age进行降序排列
 db.user.find({},{name:1,age:1,_id:0}).sort({age:1})
 db.user.find({name:‘geek’,age:22}) 查询name=‘geek’ && age=22的记录
 db.user.find().limit(5) 只查询前5条记录
 db.user.find().skip(10) 查询10条以后的所有数据
 db.user.find().skip(5).limit(5) 查询第6~10条记录
 db.user.find({KaTeX parse error: Expected 'EOF', got '}' at position 23: …e:20},{age:25}]}̲) 查询age=20或者ag…gte:25}}).count() 查询满足条件的记录的总条数
 db.user.find({grade:{KaTeX parse error: Expected 'EOF', got '}' at position 12: exists:true}̲}) 查询含有grade字段…exists:true}}).count() 查询存在sex字段的记录的总条数7、实战mongo shell
 构造一批假数据,使用insertMany()入库
 然后就可以使用上述命令进行实战练习了3、mongoose 模块连接数据库
安装:npm install mongoose -S
文档:
Mongoose快速上手
 mongoose
 mongoose中文网
 Node.js实战项目原型使用express-generator脚手架,创建工程项目
npm install express-generator -g
 express --view=ejs project // -e 指的是使用 EJS模板引擎
 cd project
 npm install
 npm start // nodemon ./bin/www
 使用mongoose驱动,连接数据库
 var mongoose = require(‘mongoose’)mongoose.connect(‘mongodb://localhost/test’, {
 useNewUrlParser: true,
 useUnifiedTopology: true
 })var db = mongoose.connection
 db.on(‘error’, function(err) {
 console.log(‘数据库连接成败’)
 })
 db.once(‘open’, function() {
 console.log(‘数据库连接成功’)
 })
 使用mongoose创建Model模型,用于对集合进行增删改查
 var mongoose = require(‘mongoose’)var userSchema = mongoose.Schema({
 name: String,
 age: Number
 })var userModel = mongoose.model(‘users’, userSchema)
module.exports = userModel
mongodb 终端启动
 mongod --dbpath “E:\Program Files\MongoDB”