MongoDB
mongoDB中文文档
数据库简介
数据库:持久化存储数据的仓库
分类:
关系型数据库:mysql、oracle、sql server、db2
非关系型数据库:mongodb、redis
MongoDB简介
文档数据库,类似json结构,存储各种JSON(BSON)。mongodb版本号,偶数稳定版,奇数开发版。
下载安装(默认端口27017)
下载: `mongodb下载地址
安装:双击安装包,配置环境变量。
验证:mongod [–dbpath 路径] [–port 端口号]
MongoDB设置系统服务
mongodb安装目录创建mongodb.cfg文件
systemLog:destination: filepath: c:\data\log\mongod.logstorage:dbPath: c:\data\db
管理员模式打开控制台
参考文档
// 安装服务sc.exe create MongoDB binPath= "\"mongo bin路径\mongod.exe\" --service --config=\"mongo路径\mongod.cfg\"" DisplayName= "MongoDB" start= "auto"// 卸载服务sc delete MongoDB
MongoDB基本操作
MongoDB的bash命令
启动服务端:mongod
启动客户端:mongo
三个概念数据库(database):存放集合
集合(collection):类似数组存放文档
文档(document):数据库最小单位,存储操作内容都是文档
n个文档组成集合,n个集合组成数据库bash操作命令
show dbs、collections // 显示所有数据库、集合
use 数据库名 // 进入指定数据库
db // 显示当前数据库
MongoDB图形化工具
图形化工具:
NoSQL Manager for MongoDB Freeware 下载地址
Studio 3T 下载地址
插入、查询、修改、删除文档
插入
db.collection.insert() // 插入1或n个文档,若未指定id则自动生成
db.collection.insertOne({}) // 插入1个文档
db.collection.insertMany([{},{}]) // 插入n个文档查询
ObjectId() // 查看生成id
db.collection.find({}) // 查询所有文档(支持n条件查询)
db.collection.findOne() // 查询1个文档
db.collection.count() // 查询文档数量修改
db.collection.update(查询条件,新对象,{multi:true}) // 新对象替换旧对象&默认修改1个
db.collection.update({},{KaTeX parse error: Expected '}', got 'EOF' at end of input: set:{key1:KaTeX parse error: Expected 'EOF', got '}' at position 5: val1}̲}) // 修改符合条件指定属…unset:{key1:key1:key1:val1}}) // 删除符合条件指定属性
db.collection.updateOne() // 修改符合1个
db.collection.updateMany() // 修改符合n个删除(逻辑删除可代替真删除)
db.collection.remove() // 删除1个或n个,第二个参数为true标识删除1个
db.collection.deleteOne() // 删除1个
db.collection.deleteMany() // 删除多个
db.collection.drop() // 删除集合
db.dropDatabase() // 删除数据库
sort和投影
sort用法
db.collection.find() // 文档显示默认id升序
db.collection.find().sort({$key:-1}) // $key降序显示(1升序,-1降序)投影用法(显示或隐藏指定字段)
db.collection.find({},{$key:1}) // find第2个参数(1显示,2隐藏)
文档间关系(内嵌映射)
文档间关系(1对1,,1对n,n对n)
1对1(丈夫与妻子)
db.collection.insert({name:“丈夫”,husband:{“妻子”}})
1对n(用户与订单)
db.collection.insert({orders:[订单1,订单2,…],user_id:ObjectId(“59c47e35241d8d36a1d50de0”)})
n对n(分类与商品)
db.collection.insert({goods:[商品1,商品2,…],category_id:“分类1”})
db.collection.insert({goods:[商品2,商品3,…],category_id:“分类2”})
补充
添加
db.col1.insert({}) // 插入文档
修改
db.col1.update({key:key:key:val},KaTeX parse error: Expected '}', got 'EOF' at end of input: set:{newKey:newVal,newVal,newVal,newKey:[newVal1,newVal1,newVal1,newVal2]}) // 添加属性(支持多级嵌套)
db.col1.update({key:key:key:val},{KaTeX parse error: Expected '}', got 'EOF' at end of input: unset:{oldKey:KaTeX parse error: Expected 'EOF', got '}' at position 7: oldVal}̲}) // 删除指定属性 …key:KaTeX parse error: Expected 'EOF', got '}' at position 4: val}̲,{push:{oldKey:oldKey:oldKey:oldVal}}) // 追加文档属性$push$addToSet
db.col1.replaceOne({key:key:key:val},{newKey:newKey:newKey:newVal}) // 替换文档
自增减(KaTeX parse error: Expected '}', got 'EOF' at end of input: …ol1.update({},{inc:{key:key:key:val}});查询
导入json文件到mongoDB数据库 // 文件导入数据
use db1 // 进入数据库
db.col1.find({}).count() // 集合查询文档数量
db.col1.find({key:key:key:val); // 集合查询文档(支持n条件,支持内嵌)运算符(gt,gt,gt,gte、lt,lt,lt,lte、eq,eq,eq,ne):db.col1.find({KaTeX parse error: Expected '}', got 'EOF' at end of input: key1:{gte:KaTeX parse error: Expected 'EOF', got '}' at position 5: val1}̲,key2:{gt:gt:gt:val1,lt:lt:lt:val2}}});
var接受查询变量 var id = db.col1.find({})[0]._id;
分页(skip,limit):db.col1.find({}).skip(n).limit(n);
多条件:db.col1.find({key1:key1:key1:val1,key2:key2:key2:val2});
条件内嵌:db.col1.find({‘key1.key1.key1.key2’:$val12});删除
db.col1.remove({}) | drop() // 删除指定文件,清空集合
mongoose简介
1. Mongoose是通过node操作MongoDB的模块,对象文档模型(ODM)库,对原生MongoDB进行优化封装
2. 可以为文档创建模型结构(Schema),对模型中对象/文档进行验证
mongoose提供api对象
Schema(模式对象):约束数据库的文档结构
Model:所有文档标识,类似集合
Document:集合中具体文档通过mongoose连接mongoDB
npm i mongoose // 安装
const mongoose = require(‘mongoose’); // 加载
mongoose.connection(“mongodb://host/database”,{useMongoClient: true})// 连接数据库
mongoose.connection.once(“open”,callback) // 连接数据库
mongoose.connect.once(“close”,callback) // 断开连接
mongoose.disconnect() // 断开链接
Schema和Model
Schema
支持类型:String,Number,Boolean,Array,Buffer,Date,ObjectId,Oid,Mixed
var Schame = mongose.Schame; // 创建Schame var objSchame = new Schame({key: Type,key: {type: Type,default: defaultVal},...});
Model
Model表示集合,对数据库中数据进行操作
var ObjModel = mongose.model(modelName,objSchame); // 创建Model ObjModel.create({/*...*/},function(err){/*...*/})// 1.查询 条件,投影({name:1,_id:0} 或 "name -_id"),选项{skip:0,limit:0},回调// ObjModel.find(condition,[projection],[options],[callback]);// ObjModel.findById(condition,[projection],[options],[callback]);// ObjModel.findOne(condition,[projection],[options],[callback]);ObjModel.find({/*条件*/},{name:1,_id:0},{skip:0,limit:0},function(err,docs){/*代码逻辑*/})ObjModel.count({/*条件*/},function(err,docs){/*代码逻辑*/})// 2.创建 doc(s),回调ObjModel.create([{...},{...}],function(err){/*代码逻辑*/})// 3.修改 条件,修改后对象,配置参数,回调// ObjModel.update(condition,doc,[options],[callback])// ObjModel.updateOne(condition,doc,[options],[callback])// ObjModel.updateMany(condition,doc,[options],[callback])// ObjModel.replaceOne(condition,doc,[options],[callback])ObjModel.updateOne({'name':'value'},{$set:{'name':'value'}},function(err,docs){/*代码逻辑*/})// 4.删除// ObjModel.remove(conditions,[callback]);// ObjModel.deleteOne(conditions,[callback]);// ObjModel.deleteMany(conditions,[callback]);ObjModel.remove({'name':'value'},function(err,docs){/*代码逻辑&doc支持上述增删改查*/})
Document的方法
// 创建Scheme// 创建Model// 创建Model实例即文档var ObjModel = new objModel({name:'tq'});ObjModel.save(function(err){/*代码逻辑*/});objModel.get('name'); // 获取指定属性值objModel.set('skill','skill'); // 设置属性值objModel.id; // 获取_idobjModel.toJSON() // 转换json对象// objModel.toObject(); // 装好object对象
mongoose的模块化
扩展
定义tools文件夹
创建conn_mongo.js文件,连接数据库
创建models文件夹
创建模型对象student.js,创建Schema,创建模型,exports(module.exports)导出
MongoDB语法
查询
db.collection.find([query],[projection]).pretty() | [count()、limit()、skip()、sort({})]
collection:集合
query:可选,查询条件
projection:可选,投影操作符
pretty:格式化显示文档
count:个数
limit:显示行数
skip:跳过几行
sort:顺序(1:正序,-1:倒序)条件查询语句
等于:{:}
小于:{:{KaTeX parse error: Expected 'EOF', got '}' at position 4: lt:}̲} 小于等于:{:{lte:}}
大于:{:{:KaTeX parse error: Expected 'EOF', got '}' at position 4: gt:}̲} 大于等于:{:{:gte:}}
不等于:{:{:$ne:}}AND条件
db.collection.find({key1:value1,key2:key2:key2:value2}).pretty();
OR条件
db.collection.find({KaTeX parse error: Expected '}', got 'EOF' at end of input: or:[{key1:KaTeX parse error: Expected 'EOF', got '}' at position 7: value1}̲,{key2:$value2}]}).pretty();
AND和OR联合使用
db.connection.find({key1:key1:key1:value2},KaTeX parse error: Expected '}', got 'EOF' at end of input: or:[{key2:{KaTeX parse error: Expected 'EOF', got '}' at position 8: gt:"11"}̲},{key2:{$lt:“20”}}],{_id:0});
排序
db.collection().find().sort({})
不显示id
db.collection.find(条件,{_id:0})