MongoDB介绍及与Python的交互

449 阅读4分钟

至于如何安装,自行搜索吧,这里就不介绍了^_^

Linux安装mongodb参考

juejin.cn/post/684490…

创建数据库

安装好mongodb数据库后,创建一个数据库

mongo --dbpath D:/process/mongodb

1 Mongo数据库的操作

# 查看数据库
shou dbs;

# 切换数据库(如果数据库不存在,则指向数据库,但不创建,直到插入数据或者创建集合时数据库才被创建)
use 数据库名;

# 删除数据库
use 数据库名
db.dropDatabase()


# 向数据库中创建一个集合
 # 切换到数据库中
use person; 
# 这个时候我们去查看数据库的时候是没有person这个数据库的
show dbs;  
# 向person这个数据库中插入了一个集合,这个时候我们使用show dbs的时候就发现有person这个数据库了
db.createCollection('student')  

2 集合的操作

# 创建集合
db.createCollection(集合名,{capped:true,size:num})
capped:默认值为false表示不设置上限,值为true表示设置上限
size:当capped值为true时,需要指定此参数,表示上限大小,当文档达到上限时,会将之前的数据覆盖,单位为字节

# 删除集合
db.集合名称.drop()

# 查看集合
show tables;
show collections






3 数据的插入

注意:插入文档时,如果不指定_id参数,MongoDB会为文档分配一个唯一的Objectld

# 3.1 insert
# 而insert则会忽略操作,insert可以—次性插入—个列表,而不用遍历,效率高

db.集合名称.insert(document)
eg: db.student.insert({"name":"张三"})

# 3.2 save
使用save函数里,如果原来的对象不存在,那他们都可以向collection里插入数据,如果已经存在,save会调用update更新里面的记录save则需要遍历列表,一个个插入,效率稍低
db.集合名称.save(document)

# 3.3举例
已存在数据:
	{i_id : 'abc123', " name " : "小王"}
再次进行插入操作时insert
	(i_id : 'abc123', "name" : "小李"})会报主键重复的错误提示
	save({ _id : 'abc123', "name" :"小李"})会把小王修改为小李
如果集合中不存在 _id :'abc123',
	insert({_id : 'abc123' , "name" :"小李"})增加一条数据
	save({_id : 'abc123', "name" :"小李"})增加一条数据
	
# 3.4 插入多条数据的话,使用列表包含
db.student.insert([{'name':"张三"},{'name':"李四"}])

# 使用for循环向mongodb中插入数据
for(i=0;i<5;i++){db.student.insert({'name':"小霸王",'age':i})};

4 数据的修改

4.1 格式

db.集合名称.update(
    <query>,
    <update>,
    {multi: <boolean>}
	)


·参数query:查询条件,类似sql语句update中where部分
·参数update:更新操作符,类似sql语句update中set部分
·参数multi:可选,默认是false,表示只更新找到的第一条记录,值为true表示把满足条件的文档全部更新


4.2 举例

#只更新找到的第一条,并且会修改结构
db.person.update({name: "zs"},{age: 16})
#只更新数据,为不更新文档结构
db.person.update({name : "zs"},{$set:{age: 123})
#更新所有找到|匹配的数据
db.person.update({name:"zs"},{$set:{age:123},{multi: true})

4.3 数据的删除

1.3数据的删除
#删除所有匹配数据
db.person.remove({name : "zS"})
#只更新一条
db.person.remove({name : "zS5"},{justOne:true})

# 删除集合的所有数据
db.student.remove({})

5 数据的查询

# 查询所有的
db.student.find()

# 只返回匹配的第一个数据
db.student.findOne({条件文档})

5.2.运算符

语法操作格式
$eq等于{:}
$lt小于{:{$It}
$lte小于或等于{:{$lte:}}
$gt大于{:{$gt:}
$gte大于或等于{:{$gte:}}
$ne不等于f:{$ne:
$or{$or:[{},{}]}
$in在范围内{age:{$in:[val1,val2]1}
$nin不在范围内{age:{$nin:[val1,val2]}}

举例

db.person.find({age:{$gt:16}})
db.person.find({$or:[{age:{$gte:18}},{name:'zs'}])
db.person.find({country:{$in:['蜀国','吴国']}})

5.3模糊匹配

使用//或者 $regex编写正则表达式

db.person.find({name:/^zs/})
db.person.find({name:{$regex:'^zs'}})

5.4自定义查询

db.person.find({$where:function(){return this.age>20}})

5.5 limit

返回指定数量的数据

db.person.find().limit(number)

5.6 skip

用于跳过指定数量的文档

db.集合名称.find(2)

5.6 sort

对查询结果进行排序

# 1 为升序 -1为降序
db.集合名称.find()sort({字段:1,...})

5.7 count

用于统计结果集中文档条数

更多查询方法请看

参考:www.jianshu.com/p/0a52c672a…

6 MongoDB与Python交互

1 安装环境
pip insta1l pymongo

import pymongo
2.连接,创建客户端
client = pymongo.Mongoclient("localhost"27017)
client = pymongo.Nongoclient('mongodb://localhost:27017/')
3.获得数据库test1
db = client.test1
db = client['test']

5.添加数据

#增加一条
m1={name:"300集",actor:"高总",level : 10}
m1_id = movie.insert_one(s1).inserted_id
        
#增加多条
m1=iname : {"300集",actor:"高总",level : 10}
m1_id = movie.insert_one(s1).inserted_id

#增加多条
mids = movie.insert_many([movie1,movie2])

注意︰原insert方法也可以实现上面的功能,但是在PyMongo 3.x的版本已经不推荐使用了

6.查找数据

. find()返回一个生成器对象. find one()返回一条数据


功能符号

符号含义示例示例合义
$regex匹配正则表达式{'name': {"$regex":"^M.**}}namel以M开头
$exists属性是否存在'name': {"$exists': True)})name属性存在
$type类型判断{('age': {"$type': 'int'}age的类型为int
$mod数字模操作('age': ("$mod': [5,0]]}年龄模5余0
$text文本查询(text:["text': ["search : 'Mike'l}text类型的属性中包含Mike亨符串
$where高级条件查询f"$where' : 'obj.fans_count == obj.follows_count"}自身粉丝数等于关注数

获取文档个数 count = movie.count() count = collection.find(i'level' : 10}).count()

排序

results = collections.find().sort('name',pymongo.ASCENGING)

偏移

collection.find().sort('name',pymongo.ASCENDING).skip(2).limit(2)

更新

args = {'name':'andy'}
stul = student.find_one(args)
stul['name'] = '张三'
student.update_one(args,{'$set':stul})

删除

# 符合条件的所有数据都会被删除
result = collection.remove({'name':'李四'})
# 删除一个
result = collection.remove({'name':'andy'})

# 删除多个符合条件的数据
result = collection.delete_many({'age':{'$lt':25}})

举例

import pymongo
# 链接数据库
client = pymongo.MongoClient()
# 选择实例
person = client.person
# 选择集合
student = person.student
# 操作数据
result = student.find()
print([r for r in result])
# or
# print(result.next())

# 过滤条件
result = student.find({'name':'andy'})

# 排序
result = student.find().sort('age',1)

# 分页
result = student.find().limit(6)

# 数量
student.find().count()

# 增加数据
data = {'name':'天狼星','age':100}
student.insert_one(data)

# 删除数据
student.remove(data)

# 更新数据
data = {'name':'天狼星'}
result = student.find_one(data)
result['age']=99
student.update(data,{'$set':result})