Python—初学MongoDB数据库

数据库

一,查看所有的数据库

show dbs
或者
show datagbases

二,查看当前正在使用的数据库

db
这里要注意:在没有切换数据库的情况下默认使用test数据库

三,切换数据库

use 数据库名字

四,创建数据库

同样使用 use 数据库的名字

这里要注意:在数据库不存在的情况下,会创建数据库,否则会切换到指定数据库
同时刚创建的数据库用show databases并没有办法看到它,需要在数据库中插入一些数据,才会在show databases中显示

MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中

五,删除当前的数据库

db.dropDatabase()

集合

一,查看当前数据库中所有的集合

show collections

二,创建集合

1,自动创建集合

向不存在的集合中第一次插入数据时,集合会被自动创建出来

2,手动创建集合

命令格式如下,
db.createCollection(name,options)

demo:
db.createCollection(“clt”)

demo2:
db.createCollection(“clt”, {capped : true, size : 10 })

说明:
参数capped: 默认值为false表示不设置上限,值为true表示设置上限
参数size: 当capped值为true时, 需要指定此参数, 表示上限⼤⼩,当⽂档达到上限时, 会将之前的数据覆盖, 单位为字节
检查集合是否有上限: db.集合名.isCapped()

三,删除集合

db.集合名称.drop()

文档相关

一,常见的数据类型

  1. Object ID : 文档ID
  2. String : 字符串,最常用,必须时有效的UTF-8
  3. Boolean : 存储一个布尔值,true或false
  4. Integer : 整数可以是32位或64位,这取决于服务器
  5. Double : 存储浮点值
  6. Arrays : 数组或列表,多个值存储到一个键
  7. Object : 用于嵌入式的文档,即一个值为一个文档
  8. Null : 存储Null值
  9. Timestamp : 时间戳, 表示从1970-1-1到现在的总秒数
    10.Date : 存储当前日期或时间的UNIX时间格式

二,注意点

每个⽂档都有⼀个属性, 为_id, 保证每个⽂档的唯⼀性,mongodb默认使用_id作为主键

可以⾃⼰去设置_id插⼊⽂档,如果没有提供, 那么MongoDB为每个⽂档提供了⼀个独特的_id, 类型为objectID

objectID是⼀个12字节的⼗六进制数,每个字节两位,一共是24 位的字符串: 前4个字节为当前时间戳 接下来3个字节的机器ID 接下来的2个字节中MongoDB的服务进程id 最后3个字节是简单的增量值

MongoDB的增删改查

一,MongoDB的插入

MongoDB可以使用 insert() 或 save() 方法向集合中插入文档

1,insert()

db.集合名字.insert(document)

demo:
db.clt.insert({name:‘hhh’,gender : 1})
这里注意:就像上面说的,在你插入文档的时候 如果没有指定_id参数,那么MongoDB会为文档分配一个唯一的ObjectID

2,save()

db.集合名称.save(document)

说明:
save()和insert()的区别在于如果存在{_id : 1 : name : “n1”}的信息
那么添加
db.clt.insert({_id : 1, name : n2})的时候会报主键重复的错误
db.clt.save({_id : 1, name : n2})则会把n1修改成n2
即save插入文档时,如果文档_id已经存在则修改,如果文档的_id不存在则添加

二,MongoDB的简单查询

db.集合的名字.find()

db.集合的名字.find().pretty()可以用易读的方式来读取数据

三,MongoDB的更新

db.集合名字.update(, ,{multi : })

说明:

  1. 参数query : 输入查询条件
  2. 参数update : 更新操作符
  3. 参数multi可选 ,默认是false,表示只更新找到的第一条记录,值为true则把满足条件的文档全部更新

demo: 查询到的第一条用新的文档进行覆盖
db.clt.update({name : ‘hhh’},{name : ‘jjj’})

demo2: $set 替换掉指定字段的值
db.clt.update({name:‘hr’},{$set:{name:‘hys’}})

demo3 : 加上{multi : true})会更新根据查询条件查到的所有文档
更新全部查到的文档
db.clt.update({},{$set : {gender : 0}},{multi : true})

这里需要注意的是更新全部只适用于$set操作符

四,MongoDB的删除

db.集合名字.remove(, {justOne : })

说明:

  1. 参数query:删除的文档的条件
  2. 参数justOne:如果设为true ,则只删除一条,默认为false,表示删除所有符合条件的文档

查询进阶

一,数据查询

  • 方法find() : 查询
    db.集合名字.find({条件文档})

  • 方法findOne() : 查询,只返回第一个
    db.集合名字.findOne({条件文档})

  • 方法pretty() : 将结果格式化
    db.集合名字.find({条件文档}).pretty()

二,比较运算符

MongoDB的比较运算符如下:

  • 等于 : 默认是等于判断,没有运算符
  • 小于 : $lt
  • 小于等于 : $lte
  • 大于 : $gt ()
  • 大于等于 : $gte
  • 不等于 : $ne

demo:查询age大于或等于18的文档
db.clt.find({age : {$gte : 18}})

三,逻辑运算符

这里的逻辑运算符主要指与,或逻辑

  • and : 在json中写入多个条件即可
    例如 :
    查询age大于或等于18,并且gender为true的文档
    db.clt.find( {age:{$gte : 18} },{gender : true} )

  • or : 使用$or,值为数组,数组中每个元素为json
    例如:
    查询age大于18,或gender为false的学生
    db.clt.find( {$or : [ {age : {$gt:18} },{gender:false} ] } )

四,范围运算符

使用$in,$nin 判断数据是否在某个数组内
查询age为18,28的学生
db.clt.find( {age : {$in : [18,28] } } )

五,编写正则表达式查询

使用 / / 或 $regex 编写正则表达式
查询以"郭"开始的name

  • 方式1:
    db.clt.find( {name : /^郭/} )

  • 方式2 :
    db.clt.find( {name : {$regex : “^郭”} } )

六,指定域查询

  • 只输出name和age域,第一个参数为查询条件,空代表查询所有
    db.clt.find( {}, { name: 1, age: 1 } )

  • 默认_id是显示的,可以通过设为0不显示
    db.clt.find( {}, { name: 1, age: 1 ,_id:0} )

  • 如果需要输出的字段比较多,不想要某个字段,可以用排除字段的方法
    不输出内容字段,其它字段都输出
    db.clt.find({}, {_id:0})

七,自定义查询

由于mongo的shell是一个js的执行环境 使⽤$where后⾯写⼀个函数, 返回满⾜条件的数据

查询年龄⼤于30的学⽣

db.clt.find({ $where:function() { return this.age>30; } })

Python与MongoDB交互

一,MongoDB和Python交互的模块

pymongo 提供了MongoDB和python交互的所有方法

安装方式:pip install pymongo

二,使用pymongo

1,导入pymongo并选择要操作的集合

数据库和集合如果没有的话会自动创建

from pymongo import MongoClient
client = MongoClient(host, port)
collection = client[db名][集合名]

2,添加数据

insert可以批量的插入数据列表,也可以插入一条数据

# 插入一条数据
collection.insert({"name": "test10010", "age": 33})
# 插入多条数据
collection.insert([{"name": "test10010", "age": 33}, {"name": "test10011", "age": 34}])

3,添加一条数据

# 插入一条数据
ret = collection.insert_one({"name": "test10010", "age": 33})
print(ret)

4,添加多条数据

# 插入多条数据
item_list = [{"name": "test1000%d" % i} for i in range(10)]

# insert_many接收一个列表,列表中为所有需要插入的字典
t = collection.insert_many(item_list)

5,查找一条数据

# find_one查找并且返回一个结果,接收一个字典形式的条件
t = collection.find_one({"name": "test10005"})
print(t)
print(type(t))

6,查找全部数据

结果是一个Cursor游标对象,是一个可迭代对象,可以类似读文件的指针

# 根据查询条件返回所有满足条件的结果
# t = collection.find({"name": "test10005"})
# find返回所有满足条件的结果,如果条件为空,则返回数据库的所有
t = collection.find()
# 结果是一个Cursor游标对象,是一个可迭代对象,可以类似读文件的指针,
for i in t:
    print(i)

print("-" * 50)

for i in t:  # 此时t中没有内容
    print(i)

7,更新一条数据

注意使用$set命令

# update_one更新一条数据
collection.update_one({"name": "test10005"}, {"$set": {"name": "new_test10005"}})

8,更新全部数据

# update_one更新全部数据
collection.update_many({"name": "test10005"}, {"$set": {"name": "new_test10005"}})

9,删除一条数据

# delete_one删除一条数据
collection.delete_one({"name": "test10010"})

10,删除全部数据

# delete_may删除所有满足条件的数据
collection.delete_many({"name": "test10010"})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值