mongodb CURD操作

mongodb数据库操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#1、增
use 数据库名 #如果数据库不存在,则创建数据库,否则切换到指定数据库。

#2、查
show dbs #查看所有

若直接创建完数据库使用这个命令,你是看不到的,要显示它,我们需要向config数据库插入一些数据。
db.table1.insert({'a':1})

#3、删
use 数据库名 #先切换到要删的库下
db.dropDatabase() #删除当前库

ps:
db代表当前库

mongodb集合操作(表)

1
2
3
4
5
6
7
8
9
10
11
12
#1、增
当第一个文档(数据)插入时,集合就会被创建
use database1
db.table1.insert({'a':1}) #自动创建集合并且插入数据
#注意 db.user和db.user.info是两个表

#2、查
show collections
show tables

#3、删
db.集合名.drop()

mongodb文档操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#增单条
#新建数据
user0={
"name":"lqz",
"age":10,
'hobbies':['music','read','dancing'],
'addr':{
'country':'China',
'city':'BJ'
}
}

db.test.insert(user0)

#增加多条
#新建多条数据
db.user.insertMany([user1,user2,user3,user4,user5])

# 有则覆盖,没则新增
db.user.save({"_id":1,"name":"lqz"})
db.user.save({"name":"lqz"})

比较运算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 比较运算
# SQL:=,!=,>,<,>=,<=
# MongoDB:{key:value}代表什么等于什么,"$ne","$gt","$lt","gte","lte",其中"$ne"能用于所有数据类型
db.user.find().pretty() # 以json格式显示,了解

#1、select * from db1.user where name = "lqz1";
db.user.find({'name':'lqz1'})

#2、select * from db1.user where name != "lqz2";
db.user.find({'name':{"$ne":'lqz2'}})

#3、select * from db1.user where id > 2;
db.user.find({'_id':{'$gt':2}})

#4、select * from db1.user where id < 3;
db.user.find({'_id':{'$lt':3}})

#5、select * from db1.user where id >= 2;
db.user.find({"_id":{"$gte":2,}})

#6、select * from db1.user where id <= 2;
db.user.find({"_id":{"$lte":2}})

逻辑运算

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#逻辑运算
# SQL:and,or,not ,mod(取余数)
# MongoDB:字典中逗号分隔的多个条件是and关系,"$or"的条件放到[]内,"$not"

#1、select * from db1.user where id >= 2 and id < 4;
db.user.find({'_id':{"$gte":2,"$lt":4}})

#2、select * from db1.user where id >= 2 and age < 40;
db.user.find({"_id":{"$gte":2},"age":{"$lt":40}})

#3、select * from db1.user where id >= 5 or name = "lqz";
db.user.find({
"$or":[
{'_id':{"$gte":5}},
{"name":"lqz"}
]
})


#4、select * from db1.user where id % 2=1;
db.user.find({'_id':{"$mod":[2,1]}})

#5、上题,取反
db.user.find({'_id':{"$not":{"$mod":[2,1]}}})

成员运算

1
2
3
4
5
6
7
8
9
# 成员运算
# SQL:in,not in
# MongoDB:"$in","$nin"

#1、select * from db1.user where age in (20,30,31);
db.user.find({"age":{"$in":[20,30,31]}})

#2、select * from db1.user where name not in ('lqz1','lqz2');
db.user.find({"name":{"$nin":['lqz1','lqz2']}})

正则匹配

1
2
3
4
5
6
7
8
# SQL: regexp 正则
# MongoDB: /正则表达/i
#1、select * from db1.user where name regexp '^l';
# 查询名字以l开头的人
db.user.find({"name":/.*?/})
db.user.find({"name":/^l/})
# 查询名字以l开头,以1结尾的所有数据
db.user.find({"name":/^l.*?1$/})

取指定字段

1
2
3
#1、select name,age from db1.user where id=3;
db.user.find({'_id':3},{'_id':0,'name':1,'age':1})
# 0表示不显示,1表示显示

查询数组

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#1、查看有dancing爱好的人
db.user.find({'hobbies':'dancing'})

#2、查看既有dancing爱好又有tea爱好的人
db.user.find({
'hobbies':{
"$all":['dancing','tea']
}
})

#3、查看第4个爱好为tea的人
db.user.find({"hobbies.3":'tea'})

#4、查看所有人最后两个爱好(注意没有hobbies字段的也会被查出)(本质用的是取指定字段,所以要放在后面的字典中)
db.user.find({},{'hobbies':{"$slice":-2},"age":0,"_id":0,"name":0,"addr":0})

#5、查看所有人的第2个到第3个爱好
db.user.find({},{'hobbies':{"$slice":[1,2]},"age":0,"_id":0,"name":0,"addr":0})

> db.blog.find().pretty()
{
"_id" : 1,
"name" : "alex意外死亡的真相",
"comments" : [
{
"name" : "egon",
"content" : "alex是谁???",
"thumb" : 200
},
{
"name" : "wxx",
"content" : "我去,真的假的",
"thumb" : 300
},
{
"name" : "yxx",
"content" : "吃喝嫖赌抽,欠下两个亿",
"thumb" : 40
},
{
"name" : "egon",
"content" : "xxx",
"thumb" : 0
}
]
}
db.blog.find({},{'comments':{"$slice":-2}}).pretty() #查询最后两个
db.blog.find({},{'comments':{"$slice":[1,2]}}).pretty() #查询1到2

排序

1
2
3
# 排序:--1代表升序,-1代表降序
db.user.find().sort({"name":1,})
db.user.find().sort({"age":-1,'_id':1})

分页

1
2
3
4
5
6
7
8
9
10
# 分页:--limit代表取多少个document,skip代表跳过前多少个document。 
# limit中表示一页显示的条数,skip(页码数*一页显示的条数)
db.user.find().sort({'age':1}).limit(1).skip(2)


# 表关联
user {_id:1,name:lqz,age:18} 一个人写多篇文章
article ----》子查询
{'userid':1,article:红楼梦}
{'userid':1,article:西游记}

获取数量

1
2
3
4
# 获取数量
db.user.count({'age':{"$gt":30}})
--或者
db.user.find({'age':{"$gt":30}}).count()

其他

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#1、{'key':null} 匹配key的值为null或者没有这个key
db.t2.insert({'a':10,'b':111})
db.t2.insert({'a':20})
db.t2.insert({'b':null})

> db.t2.find({"b":null})
{ "_id" : ObjectId("5a5cc2a7c1b4645aad959e5a"), "a" : 20 }
{ "_id" : ObjectId("5a5cc2a8c1b4645aad959e5b"), "b" : null }

#2、查找所有
db.user.find() #等同于db.user.find({})
db.user.find().pretty()

#3、查找一个,与find用法一致,只是只取匹配成功的第一个
db.user.findOne({"_id":{"$gt":3}})