mongodb基本使用

1、mongodb简介

MongoDB是一个基于分布式文件存储的数据库,是介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。python

2、安装与配置

https://blog.csdn.net/congcong68/article/details/44277469正则表达式

 

3、mongodb的增删改查

(一)数据库操做

1 use blog  #切换数据库,没有时会建立
3 show dbs    #查看全部的数据库(数据库必须有数据才会显示)
5 db.dropDatabase()   #删除数据库

(二)collection操做

集合就是至关于关系数据库中的表mongodb

1 use blog  #切换数据库
2 db.article.insert({'title':'python'})  #建立集合article并插入数据,db指当前用的数据库
3 show tables    #查看集合(表)
4 db.article.drop()   #删除集合

(三)文档操做

文档至关于关系数据库中的记录数据库

一、添加文档数组

1 user0 = {'name':'alex',...}
2 db.test.insert(user0)   #插入单条
3 user1 = {...}
4 user2 = {...}
5 user3 = {...}
6 db.test.insertMany([user1,user2,user3])   #插入多条

二、查看文档分布式

 1 db.user.find()  #查看集合中全部文档
 2 db.user.find().pretty()  #格式化展现输出结果
 3 db.user.findOne()   #只取匹配成功的第一个
 4 
 5 db.user.find({至关于where条件},{至关于select条件})
 6 
 7 ###########比较运算##########
 8 '$gt','$lt','$gte','$lte','$ne' 分别表明大于、小于、大于等于、小于等于、不等于
 9 
10 db.user.find({'name':'alex'})   #查询name等于alex的
11 
12 db.user.find({'name':{"$ne":'alex'}})  # #查询name不等于alex的
13 
14 db.user.find({'_id':{'$gt':2}})   #id大于2的
15 
16 db.user.find({"_id":{"$gte":2,}})  #id大于等于2的
17 
18 
19 ###########逻辑运算##########
20 '$or'  或;'$not' 非;字典中多个条件用逗号分隔是and关系
21 
22 db.user.find({'_id':{"$gte":2,"$lt":4}}  #id大于等于2,小于4的
23 db.user.find({"_id":{"$gte":2},"age":{"$lt":40}}) #id等于2,年龄小于40的
24 
25 db.user.find({"$or":[{'_id':{"$gte":5}}, {"name":"alex"} ]})  #id大于等于5或name等于alex的
26 
27 db.user.find({'_id':{"$mod":[2,1]}})  #id除以2余数为1的
28 
29 db.user.find({'_id':{"$not":{"$mod":[2,1]}}})  #id除以2余数为1的 
30   取反
31 
32 ###########成员运算##########
33 db.user.find({'age':{'$in':[20,30,31]}})  #in
34 
35 db.user.find({'age':{'$nin':[20,30]}})    # not in 
36 
37 
38 ###########正则匹配##########
39 /正则表达式/i ,i表示模式
40 db.user.find({'name':/^j.*?(g|n)$/i})  
41 
42 ###########取指定的字段##########
43 
44 db.user.find({'_id':3},{''name':1,'age':1})  #1表示取,0表示不取
45 注意:{''name':1,'age':1},字典内要么都是1,要么都是0,不能既有1又有0,可是'_id'除外
46 
47 ###########查询数组##########
48 直接用点取值
49 
50 db.user.find({'hobbies':'dancing'})  #查询hobbies对应列表中有dancing的人
51 db.user.find({"hobbies.3":'tea'})  #查询hobbies对应列表的第四个值为tea的
52 
53 db.user.find({},{'hobbies':{"$slice":-2})#查询全部人最后两个爱好
54 
55 ###########排序##########
56 
57 db.user.find().sort({"age":-1,'_id':1})  # 1表明升序,-1表明降序
58 
59 ###########分页##########
60 
61 db.user.find().sort({'age':1}).limit(1).skip(2)  #limit表明取多少个,skip表明跳过前面多少个
62 
63 ###########统计数量##########
64 
65 db.user.count({'age':{"$gt":30}})
66 或  db.user.find({'age':{"$gt":30}}).count()
67 
68 ###########其余##########
69 {'key':null} 匹配key的值为null或者没有这个key
70 
71 db.t2.find({"b":null})  #b为null或没有b的

三、更新文档url

 1 ######### update()方法 #######
 2 
 3 对比update db1.t1 set name='EGON',sex='Male' where name='egon' and age=18;
 4 
 5 update() 方法用于更新已存在的文档。语法格式以下:
 6 db.collection.update(
 7    <query>,     //查询条件,至关于where
 8    <update>,    //update的对象和一些更新的操做符,至关于set
 9    {
10      upsert: <boolean>,  //可选,默认false,表明不存在update的记录不更新也不插入,设为true,表示插入
11      multi: <boolean>,    // 可选,默认false,表明只更新找到的第一条几录,设为true,表明更新所有
12      writeConcern: <document>  //可选,抛出异常的级别
13    }
14 )
 1 #########覆盖更新#######
 2 用新的文档替换匹配的文档
 3 db.user.update({'age':20},{"name":"Wxx","hobbies_count":3})#是用{"_id":2,"name":"Wxx","hobbies_count":3}覆盖原来的记录
 4 
 5 #########局部更新#######
 6 只更新文档的一部份内容
 7 
 8 db.user.update({'_id':6},{"$set":{"name":"egon","age":18}},{"upsert":true})   #没匹配成功会新插入一条
 9 
10 db.user.update({'_id':{"$gt":4}},{"$set":{"age":38}},{"multi":true})   #更新多条
11 
12 #########自增自减#######
13 db.user.update({},{ "$inc":{"age":1}}, { "multi":true }) #全部人年龄加一岁
14 db.user.update({},{ "$inc":{"age":-1}}, { "multi":true })  #全部人年龄减一岁
15 
16 #########添加删除数组内的元素#######
17 添加删除数组内元素:$push,$pop,$pull
18 
19 #一、为名字为yuanhao的人添加一个爱好read
20 db.user.update({"name":"yuanhao"},{"$push":{"hobbies":"read"}})
21  
22 #二、为名字为yuanhao的人一次添加多个爱好tea,dancing
23 db.user.update({"name":"yuanhao"},{"$push":{
24     "hobbies":{"$each":["tea","dancing"]}
25 }})
26 
27 按照位置且只能从开头或结尾删除元素:$pop
28 #三、{"$pop":{"key":1}} 从数组末尾删除一个元素
29  
30 db.user.update({"name":"yuanhao"},{"$pop":{
31     "hobbies":1}
32 })
33  
34 #四、{"$pop":{"key":-1}} 从头部删除
35 db.user.update({"name":"yuanhao"},{"$pop":{
36     "hobbies":-1}
37 })
38 
39 #五、按照条件删除元素,:"$pull" 把符合条件的通通删掉,而$pop只能从两端删
40 db.user.update({'addr.country':"China"},{"$pull":{
41     "hobbies":"read"}},{ "multi":true})
42 
43 #########避免重复添加#######
44 "$addToSet"
45 
46 db.urls.insert({"_id":1,"urls":[]})
47 
48 #下面只会添加一次
49 db.urls.update({"_id":1},{"$addToSet":{'urls':'http://baidu'}})
50 db.urls.update({"_id":1},{"$addToSet":{'urls':'http://baidu'}})

四、删除文档spa

1 #一、删除多个中的第一个
2 db.user.deleteOne({ 'age': 8 })
3  
4 #二、删除国家为China的所有
5 db.user.deleteMany( {'addr.country': 'China'} )
6  
7 #三、删除所有
8 db.user.deleteMany({}) 

 

4、在python中的使用---pymongo模块 

基本使用:.net

#插入单个文档
result = collection.insert(student)
print(result)

#插入多个文档
result = collection.insert([student1, student2])
print(result)

# 实际上在PyMongo 3.X版本中,insert()方法官方已经不推荐使用了,固然继续使用也没有什么问题,
# 官方推荐使用insert_one()和insert_many()方法将插入单条和多条记录分开。
 1 import pymongo
 2 
 3 client = pymongo.MongoClient(host='localhost',port=27017)
 4 
 5 #指定数据库
 6 db = client.blog
 7 print(db)
 8 #指定集合
 9 collection = db.user
10 #查询多个
11 # for el in collection.find():
12 #     print(el)
13 
14 #只返回查询到的第一个结果
15 # result = collection.find_one({'age':{'$gt':10}})
16 # print(result)
17 
18 
19 #使用正则查询
20 res = collection.find({'name':{'$regex':'^w.*'}})
21 # for el in res:
22 #     print(el)
23 
24 #计数
25 count = collection.find().count()
26 print(count)
27 
28 #排序  多个条件
29 ret = collection.find().sort([('name',pymongo.ASCENDING),('age',pymongo.DESCENDING)])
30 for el in ret:
31     print(el)
 1 #对于数据更新可使用update()方法,指定更新的条件和更新后的数据便可
 2 condition = {'name': 'Kevin'}
 3 student = collection.find_one(condition)
 4 student['age'] = 25
 5 result = collection.update(condition, student)
 6 print(result)
 7 
 8 #update()方法其实也是官方不推荐使用的方法,在这里也分了#update_one()方法和update_many()方法,用法更加严格,
 9 # 第二个参数须要使用$类型操做符做为字典的键名
10 condition = {'name': 'Kevin'}
11 student = collection.find_one(condition)
12 student['age'] = 26
13 result = collection.update_one(condition, {'$set': student})
14 print(result)
15 print(result.matched_count, result.modified_count)
16 # 在这里调用了update_one方法,第二个参数不能再直接传入修改后的字典,而是须要使用{'$set': student}这样的形式,
17 # 其返回结果是UpdateResult类型,而后调用matched_count和modified_count属性分别能够得到匹配的数据条数和影响的数据条数。
18   
19 # 运行结果:
20 # <pymongo.results.UpdateResult object at 0x10d17b678>
21 # 1 0
22 
23 condition = {'age': {'$gt': 20}}
24 result = collection.update_many(condition, {'$inc': {'age': 1}})
25 print(result)
26 print(result.matched_count, result.modified_count)
27 # 这时候匹配条数就再也不为1条了,运行结果以下:
28 #
29 # <pymongo.results.UpdateResult object at 0x10c6384c8>
30 # 3 3
#删除

直接调用remove()方法指定删除的条件便可,符合条件的全部数据均会被删除 result = collection.remove({'name': 'Kevin'}) print(result) # 运行结果: # # {'ok': 1, 'n': 1} # 另外依然存在两个新的推荐方法,delete_one()和delete_many()方法,示例以下: result = collection.delete_one({'name': 'Kevin'}) print(result) print(result.deleted_count) result = collection.delete_many({'age': {'$lt': 25}}) print(result.deleted_count) # 运行结果: # <pymongo.results.DeleteResult object at 0x10e6ba4c8> # 1 # 4 # delete_one()即删除第一条符合条件的数据,delete_many()即删除全部符合条件的数据,返回结果是DeleteResult类型, # 能够调用deleted_count属性获取删除的数据条数。

关于$的其余功能符号:code

# 在这里将一些功能符号再归类以下:
"""
符号含义示例示例含义
$regex匹配正则{'name': {'$regex': '^M.*'}}name以M开头
$exists属性是否存在{'name': {'$exists': True}}name属性存在
$type类型判断{'age': {'$type': 'int'}}age的类型为int
$mod数字模操做{'age': {'$mod': [5, 0]}}年龄模5余0
$text文本查询{'$text': {'$search': 'Mike'}}text类型的属性中包含Mike字符串
$where高级条件查询{'$where': 'obj.fans_count == obj.follows_count'}自身粉丝数等于关注数
"""
相关文章
相关标签/搜索