目录
mongodb常见指令
1. 创建数据库mydb,并将库作为当前库
use mydb
2. 查看所有的数据库
show dbs ;
show databases ;
查看当前数据库
db;
3.插入数据 (几乎所有的操作都是以db开头)
db.mydb.insert({name:'张无忌'}) ;
4.查看当前数据库所有的集合
show tables;show collections ;
5.查看所有的记录
db.mydb.find() ;
6.删除集合
db.mydb.drop() ;
7.删除当前数据库
db.dropDatabase() ;
8.清屏指令
cls
9.插入多条数据
db.mydb.insert({name:'张无忌',age:23}) ;
db.mydb.insert({name:'郭靖',age:22,address:"桃花岛"}) ;
db.mydb.insert({name:'乔峰',age:28,address:'丐帮'}) ;
db.mydb.insert({name:'令狐冲',age:25,address:{pro:'陕西',city:'西安'}}) ;
db.mydb.insert({name:'胡斐',age:31}) ;
db.mydb.insert({name:'杨过',age:27,sex:'男'}) ;
10.查看所有的记录
db.mydb.find() ;
11.查找名字是张无忌的人的信息
db.mydb.find({name:'张无忌'})
12.查询id的值是60719e3301ce82b7672e2381
db.mydb.find({_id:ObjectId('60719e3301ce82b7672e2381')})
13.查询年龄>25的人
db.mydb.find({age:{$gt:25}})
14.查询年龄小于25的人
db.mydb.find({age:{$lt:25}})
15.查询年龄>=25的人 ($lte 表示 <=)
db.mydb.find({age:{$gte:25}})
16.查询名字是杨过,年龄是27的人
注意:此时先插入一条数据:db.mydb.insert({name:'杨过',age:35,sex:'男'}) ;
db.mydb.find({name:'杨过',age:27})
17.查询名字是杨过或者年龄是27的人
db.mydb.find({$or:[{name:'杨过'},{age:27}]})
18.查询名字不是杨过的人
db.mydb.find({name:{$ne:'杨过'}})
19.显示数据的部分属性:只显示姓名,年龄
db.mydb.find({},{name:1,age:1,_id:0})
20.显示不同的姓名 : distinct
db.mydb.distinct("name")
获取返回的数组中的元素
var x = db.mydb.distinct("name")
x[0] 获取到了张无忌
x.length 获取到数组的长度
21.显示地址在桃花岛或者丐帮的人: $in
db.mydb.find({address:{$in:['丐帮','桃花岛']}})
22.显示地址不在桃花岛或者丐帮的人: $nin
db.mydb.find({address:{$nin:['丐帮','桃花岛']}})
23.显示家在西安的人
先插入两条数据
db.mydb.insert({name:'张三丰',age:36,address:{pro:'陕西',city:'西安'}})
db.mydb.insert({name:'扫地僧',age:40,address:{pro:'河北',city:'石家庄'}})db.mydb.find({"address.city": '西安'})
24.只想查询第一条记录
db.mydb.findOne()
db.mydb.findOne({"address.city": '西安'})
25.格式化显示的结果
db.mydb.find().pretty()
26.排序 sort({"属性名":1}), 1表示升序 -1降序
按照年龄进行排序
db.mydb.find({},{name:1,age:1}).sort({"age":1})
此时插入数据 db.mydb.insert({name:'杨铁心',age:31,sex:'男'})
根据多个属性进行排序
db.mydb.find({},{name:1,age:1}).sort({"age":1,"_id":-1})
27.查询集合中有多少条文档 count()
db.mydb.count()
28.限制查询:limit(m) m代表了截取几条文档
显示年龄最大的两个人
db.mydb.find({}).sort({"age":-1}).limit(2)
29.定位方法(跳过): skip(m) m表示跳过m条数据
db.mydb.find({}).sort({"age":-1}).skip(2).limit(2)
30.求余数运算: $mod $icr
查询年龄对10取余数为3的人
db.mydb.find({age:{$mod:[10,3]}}) //mod取余
31.模糊查询:采用正则表达式查询 / / ^开头 $表示结尾
查询所有姓张的人
db.mydb.find({name:/张/})
32.$exists: 存在与否
查询所有没有地址的人
db.mydb.find({address:{$exists:false}})
33.$all : 针对数组的查询,表示文档中有$all指定的所有值就满足条件
db.mydb1.insert({"fruit":["苹果","橘子","香蕉"]})
db.mydb1.insert({"fruit":["苹果","菠萝"]})
db.mydb1.insert({"fruit":["橘子","菠萝"]})
查询含有苹果的文档 : 表示含有苹果即可。
db.mydb1.find({"fruit":"苹果"})
查询含有苹果和橘子的文档 :表示两种水果都要有
db.mydb1.find({"fruit":{$all:["苹果","橘子"]}})
34.查询有两种水果的文档 $size :用于数组
db.mydb1.find({"fruit":{$size:2}})
注意:$size 只能用于等于具体的值。不能用于范围。比如查询水果种类 > 2的情况,就不能写$size : {$gt:2}样子
建议的方式就是给每个文档在插入时多加一个字段,存储数组的长度即可。
35.在数组中存储json对象
db.mydb2.insert({"fruit":[{"name":"苹果","type": 1},{"name":"橘子","type": 2},{"name":"香蕉","type": 1}]})
db.mydb2.insert({"fruit":[{"name":"苹果","type": 1},{"name":"菠萝","type": 3}]})
db.mydb2.insert({"fruit":[{"name":"橘子","type": 2},{"name":"菠萝","type": 3}]})
db.mydb2.insert({"fruit":{"name":"苹果","type": 1}})
查询类型为1的水果 :只要包含有类型为1的水果即可满足条件。
db.mydb2.find({"fruit.type":1})
36.查询第二个水果的类型是2的文档
db.mydb2.find({"fruit.1.type":2})
37.希望更改张无忌的名字是张翠山
db.mydb.update({"name":"张无忌"},{"name:":"张翠山"}) 这种写法会覆盖所有数据,其他属性相关数据就没有了。
db.mydb.update({name:"乔峰"},{$set:{address:'辽东'}}); $set表示只修改指定的属性
db.mydb.update({name:"令狐冲"},{$set:{age:23,address:'陕西咸阳'}});
db.mydb.update({name:"黄蓉"},{$set:{age:23}},1,0)
也可以试试这句比较一下 db.mydb.update({name:"黄蓉"},{$set:{age:20}},0,0)
(补充说明:
db.mydb.update( criteria, objNew, upsert, multi )
criteria:哪些记录需要更新,类似于SQL update(where)子句
objNew:更新的操作符等$,$inc,类似于SQL update(set)子句
upsert:插入,如果不存在update记录,是否插入objNew,默认false不插入
multi:默认false,只更新找到的第一条记录,为true更新查找出来的多条记录)
38.删除:删除杨铁心的文档
db.mydb.remove({name:'杨铁心'})
39.删除某个文档的某个指定的属性: $unset
db.mydb.update({"name":"令狐冲"},{$unset:{"address":1}},0,1)
40.给指定的值添加 $inc
给所有人的年龄添加5岁
db.mydb.update({},{$inc:{age:5}},0,1) // 1指定所有人,如果第一条记录没有age,默认加5后为age:5
备份和恢复
备份的数据库,会放到安装目录的mongodb/bin/dump目录下
备份所有的数据库:dos窗口在mongodb客户端输入 mongodump指令
备份指定的数据库,在dos窗口
情况一:如果在任意目录(不在备份的目录下),备份的结果是没有dump目录,恢复的时候需要手动创建dump目录,将数据移动到dump目录下。
情况二:如果在dos窗口直接在备份目录下,那么备份的结果就有demp目录。
建议在备份目录下进行备份:
D:\mongodb\bin> mongodump -d mydb 备份到d盘下的mongodb\bin目录下.
恢复
D:\mongodb\bin> mongoresotre --drop
导入导出:(和备份还原没什么区别)都需要在dos客户端
导出:
D:\mongodb\bin> mongoexport -d mydb -c mydb mydb.json -d是指定数据库,-c指定集合, mydb.json是导出的文件名
导入:
D:\mongodb\bin> mongoimport -d mydb -c mydb mydb.json