mongoDB 常用命令
1.mongoDB数据库命令
一、MongoDB简介
-
mongodb 文档数据库,存储的是文档(Bson->json的二进制化).
-
json数据存储的就是js中对象和数组。
-
{name:'zhangsan',age:'9'}
-
-
MongoDB特点:内部执行引擎为JS解释器,。
- 把文档存储成bson结构,在查询时,转换为JS对象,并可以通过熟悉的js语法来操作.
-
mongo和传统型数据库相比,最大的不同:
-
传统型数据库: 结构化数据, 定好了表结构后,每一行的内容,必是符合表结构的,就是说--列的个数,类型都一样.
-
mongo文档型数据库: 集合中存储的每篇文档,都可以有自己独特的结构(json对象都可以有自己独特的属性和值)
-
mongo数据库的collection不用提前创建(可以隐式创建。)。关系型数据库的表必须提前创建表的
-
-
mongodb数据库bin目录下的文件意义
查看数据库
show dbs
创建数据库
- mongoDB的数据库是隐式创建的
- 步骤
- use 不存在的库名
- 创建表
- 在 这个 库里边 创建集合(也就是表),或者直接插入数据就创建好了。
删除集合(数据表)
db.collectionName.drop() //删除集合(数据表)
删除数据库
db.dropDatabase() //删除数据库
注意 数据库中的集合为空(也就是数据表)为空时,数据库自动删除!
2.mongoDB CRUD(增删改查)命令
-
增加 insert()
``` db.collectionName.insert(document) ```
- 增加一个文档
db.collectionName.insert({key:value})
- 增加文档并且 指定id值
- 这里需要注意的是一般不指定情况下有默认的ID值
db.collectionName.insert({_id:num_value,key:value,key:value})
- 增加多个文档
db.collectionName.insert([{key:value},{key:value},{key:value}])
- 增加一个文档
-
修改update()
db.collection.update(查询表达式,新值,选项) 改成什么样? -- 新值 或 赋值表达式 操作选项 ----- 可选参数
举例:
db.stu.update({name:'zs'},{name:'zl'})
当我们执行该操作之后可以看到,文档修改为
{name:'zl'}
,文档中的其他列不见了,只剩下_id和name列,是新文档,替换了旧文档,而不是修改。如果是想修改文档的某列,可以用$set关键字:
$set:修改某列的值:也可以给某个列添加一个field
举例:db.stu.update({name:'ls'},{$set:{name:'gz'}}) # 查询到name为 ls的这条数据,使用$set来保证只是修改这个列 name为gz 不删除其他列内容
修改时的赋值表达式
-
$set 修改某列的值
-
$unset 删除某个列
举例:db.stu.update({name:'gz'},{$unset:{age:1}}) # 查询到 name为 gz的这条数据,删除age这一列,1代表确认删除,当然你指定0就删除不了了
-
$rename 重命名某个列
举例:db.stu.update({name:'gz'},{$rename:{name:'new_name'}}) # 查询到 name为gz的这条数据,修改name列为new_name
-
$inc 增长某个列
举例:db.stu.update({name:'ch'},{$inc:{age:12}}) # 查询到name为ch这一列,给age字段的value加12
Option的作用:{upsert:true/false,multi:true/false}
Upsert---有则更新,无则插入。
Multi: True--->更新所有,false更新一条
举例:
db.trade.update({name:'ch'},{$set:{gender:1}},{upsert:true}) # 查询 到 name 为 ch的数据,如果 gender字段存在,则修改值,否则就添加gender字段
db.news.update({_id:99},{x:123,y:234},{upsert:true}) # 如果没有_id=99的文档被修改,就直接插入该文档
db.stu.update({age:{$gt:10}},{$set:{age:30}},{upsert:true}) # multi: 是指修改多行(即使查询表达式命中多行,默认也只改1行,如果想改多行,可以用此选项)
-
-
查找find()
语法: db.collection.find(查询表达式,查询的列) db.collections.find(表达式,{列1:1,列2:1})
在查询的列参数中,1表示显示,0表示不显示
-
查询所有文档 所有内容
db.document.find()
-
查询所有文档,的name属性 (_id属性默认总是查出来)
db.document.find({},{name:1})
-
查询所有文档的gender属性,且不查询_id属性
db.document.find({gender:1},{name:1,_id:0});
-
查询所有的内容,并且格式化显示
db.document.find().pretty()
MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,及常规 SQL 的 AND 条件
db.document.find({key1:value1, key2:value2}).pretty()
常用方法:
- limit() 限制条数
db.document.find().limit(number)
- skip() 跳过过少条目数量
db.document.find().limit(number).skip(number)
- sort() 排序 1为升序,-1为降序
db.document.find().sort({KEY:1})
- count() 计数
db.find().count()
查询表达式
-
最简单的查询表达式
{filed:value} ,是指查询field列的值为value的文档
-
$lt小于
举例:
db.stu.find({age:{$lt:40}},{}) # 查询age小于40岁的所有人的所有信息
-
$lte小于等于
-
$gt 大于
举例:
db.stu.find({age:{$gt:10}},{}) # 查询 age大于 10岁的所有人的所有信息
-
$gte大于等于
-
$ne != 不等于
db.stu.find({age:{$ne:10}},{}) # 查询 age不等于10岁的所有人的所有信息
-
$nin --> not in 不在一个选择区域内
db.stu.find({age:{$nin:[10,20,50]}},{}) # 查询所有的 age不在 列表中的 所有人的 所有信息
-
$all:指数组所有单元匹配,就是指我指定的内容都要有,通过一个list来指定
db.stu.find({hobby:{$all:['book']}},{}) # 查询所有的 学生 爱好都有读书的
-
$exists 含有该字段的文档
db.stu.find({he:{$exists:1}},{}) # 查询 所有的 学生 拥有he这个字段的文档
-
**\(nor** {\)nor:[条件1,条件2]} 是指 所有条件都不满足的文档为真返回
db.trade.find({$nor:[{age:3},{age:18}]},{}) # 查询 age为3 或者 age为 18 两个 都不满足的 其他文档
-
**\(and** {\)and:[条件1,条件2]} 是指 所有条件都满足,就为真
-
**\(or**{\)or:[条件1,条件2]} 是指 条件1和条件2有一个满足,就为真
删除remove
语法:
db.collection.remove(查询表达式, 选项)
1: 查询表达式依然是个json对象 {age:20}
2: 查询表达式匹配的行,将被删掉.
3: 如果不写查询表达式,collections中的所有文档将被删掉
举例:
1.删除学生age小于18的所有信息
db.stu.remove({age:{$lt:18}})
2.删除学生age小于18的所有信息,只删除一行
db.stu.remove({age:{$lt:18},true})