Mongo 使用数据库
Mongod 开机
Mongoimport 导入数据
Nosql: 非关系型数据库, MongoDB 是其中一个
1, 通过 Mongo 连接, 默认连接的是 test 数据库(这个数据库不可删, 是 MongoDB 安装的时候自带的)
2,MongoDB 与其他数据库相比, 关系型数据库必须创建表和字段, 否则无法使用. 但是 MongoDB 属于 "无状态模式", 结构不需要设计, 直接使用即可, 存什么东西取决于我们自己向他传入什么!(当不存在则创建)
由于市场普标称之为表, 所以 MongoDB 做了兼容语法处理
显示所有数据库: show dbs / show databases(都是一样的)
显示所有集合 / 表: show collections / show tables(都是一样的)
显示当前使用数据库: db / db.getName();
数据库状态: db.stats()
资料:
"db" : "dnedu",: 表示当前是针对 "数据库" 的描述
"collections" : 3,: 表示当前数据库有多少个 collections, 当然也可以通过 show collections
"objects" : 14,: 表示当前数据库所有 collection 总共有多少行数据, 但是只是一个估计值, 并不是非常的精准
"avgObjSize" : 60.142857142857146,: 每行数据的大小, 也是估计值
"dataSize" : 842, : 当前数据库所有数据的总大小
"storageSize" : 90112, 表示当前数据库占有磁盘大小, 单位 bytes
"numExtents" : 0,: 包含所有集合中数据库中扩展数量的计数
- "indexes" : 3,
- "indexSize" : 90112,
- "ok" : 1
控制台运算
写入数据:
一: 普通数据添加方式:
插入数据是咱们熟悉的 "json" 格式, 而在 MongoDB 实际上使用的语法称之为 "bson" BSON()是一种类 JSON 的一种二进制形式的存储格式, 简称 Binary JSON, 它和 JSON 一样, 支持内嵌的文档对象和数组对象, 但是 BSON 有 JSON 没有的一些数据类型, 如 Date 和 BinData 类型.
- db.product.insert({
- name:"xiaomi6",price:1999,weight:140,number:40,area:{
- province:"beijing",city:"beijing"
- }
- })
- db.product.insert({
- name:"huawei01",price:2999,weight:120,number:20,area:{
- province:"shenzhen"
- }
- })
当集合 (product) 不存在则创建一个新的集合, 插入的数据格式基本和 JSON 一样
二: 多维数组对象添加:
db.product.insert({name:"xiaomi6",price:1999,weight:140,number:40,area:{province:"beijing",city:"beijing"}})
三: 数组信息的添加
db.product.insert({name:"xiaomi6",price:1999,weight:140,number:40,color:['red','black','yellow']})
我们不可能一条一条的数据去插入, 所以可以直接导入 JSON 文件批量插入文档 mongoimport --db dnedu --collection product --drop --file dr.JSON 注意 --drop 是先删除后导入, 也可以不用 --drop 不删除直接导入
数据查询:
笼统查询:
查询所有数据: db.product.find()
查询第一条数据: db.product.findOne();
条件限制查询: db.product.find({name:"huawei01"}). 类似于 MySQL 命令: select * from 表名 where name = "huawei01"
ID:id 的字段内容值是 MongoDB 本身算法获得的, 该_id 对应的值信息在 "全球唯一", 相当于 MySQL 当中的主键 id, 是唯一的, 该 id 可以自行设置, 但是不推荐
范围查询
关键字:$gt $lt $gte $lte
MongoDB 里面的字段单引号和双引号都可以, 随意, 只是在 PHP 由于会把 $ 解释运行, 所以 PHP 不行
查询 price 大于 2500 的数据 db.product.find({price:{'$gt':2500}})
查询 price 小于 2500 的数据 db.product.find({price:{'$lt':2500}})
设置多个查询条件:
查询 price 大于 2500,weight 小于 100 的数据
db.product.find({price:{'$gt':2500},weight:{'$lt':100}})
查询 price 大于 2500,weight 等于 20 的数据
db.product.find({price:{'$gt':2500},weight:20})
多维字段查询:
查询 area 里面的 province 等于 changsha
db.product.find({'area.province':"changsha"})
数组条件查询:
查询 color 带有 red 的数据(包含一个)
db.product.find({color:'red'});
查询 color 带有 red 和 black 的数据(必须包含两个)
db.product.find({color:{'$all':['red','black']}})
$or, 多个条件, 满足其一即可
price 等于 3000 或 number 小于 100
db.product.find({'$or':[{price:3000},{number:{'$lt':100}}]})
限制查询字段:
查询数据 price 等于 3000, 数据只显示 name
db.product.find({price:3000},{name:1}), 这条语句有 id
db.product.find({price:3000},{name:1,_id:0}): 这条语句真的就只有 name 字段了
1. 表示查询显示此字段 0. 表示排除不显示此字段
如果你需要, 比如 name 为 1,price 为 0, 那么会报错, 因为 MongoDB 的规则 (可以都为 1, 页可以都为 0) 就是要输出就全部输出, 要么不输出就全部不输出,_id 除外, 可以随意设置 0,1,
db.product.find({price:3000},{name:1,price:0,_id:0})
修改数据:
关键字:$set
修改 name 等于 huawei06 的字段, 但只修改了一条
db.product.update({name:"huawei06"},{'$set':{name:"update before name"}});
如果修改语句中, 没有 $set, 会导致删除其他除 id 外的所有字段, 然后保留我们自己设置的字段, 会有下面这张黑图的字段变为下面的图片所剩的字段
如果修改的字段没有则创建, 如果执行以下命令
db.product.update({name:"huawei07"},{history:"i don't know"})
上面这条语句会删除其他除 id 以外的所有字段, 然后创建 hisotry 字段
删除数据: 删除所有 name 等于 huawei03 的数据
db.product.remove({name:"huawei03"})
删除字段: db.product.update({name:"huawei04"},{'$unset':{name:1}});, 只会删除一条
模糊匹配:
如果只需要一条数据, 可以有两种方式:
Limit: 获取多少条数据 db.teacher.find({name:/ 哈 /}).limit(1)
FindOne: 只获取一条: db.teacher.findOne({name:/ 哈 /})
来源: https://juejin.im/post/5c68cbfa6fb9a049e2328b4e