python后端:MongoDB数据库

目录

 

1. 简介

2. pip安装

3. 创建数据库

4. 判断数据库是否存在

5. 创建集合(MongoDB中没有数据表的概念,统称集合)

6. 判断集合是否存在

7. 增、删、改、查的操作

一、添加数据

二、查询数据

三、修改数据

四、删除数据

五、查看表


1. 简介

MongoDB是目前最流行的NoSQL数据库之一,使用的数据类型BSON(类似JSON)。

2. pip安装

安装pymongo:

pip install pymongo

# 也可指定安装的版本
pip install pymongo==3.5.1

# 更新pymongo
pip install --upgrade pymongo

3. 创建数据库

创建数据库需要使用MongoClient对象,并且指定连接的URL地址和要创建的数据库名。

如:

import pymongo

myclient=pymongo.MongoClient("mongodb://localhost:27017/")
mydb=myclient["runoobdb"]

# 注:MongoDB中,数据库只有在内容插入后才会创建,就是说,数据库创建后要创建集合(数据表)
并插入一个文档(记录),数据库才会真正创建。

4. 判断数据库是否存在

import pymongo
myclient=pymongo.MongoClient("mongodb://localhost:27017/")
dblist=myclient.list_database_names()

if 'ruboob' in dblist:
    print('数据库已存在')

5. 创建集合(MongoDB中没有数据表的概念,统称集合)

MongoDB中的集合类似SQL中的表,使用数据库对象来创建集合:

import pymongo

myclient=pymongo.MongoClient('mongodb://localhost:27107/')
mydb=myclient['runoob']

mycol=mydb['sites']

# 创建集合(数据表)后要再插入一个文档(记录),集合才会真正创建。

6. 判断集合是否存在

import pymongo

myclient=pymongo.MongoClient('mongodb://localhost:27107/')
mydb=myclient['runoobdb']

collist=mydb.list_collection_names()

if 'sites' in collist:
    print('集合已存在!')

7. 增、删、改、查的操作

一、添加数据

单条数据插入集合:调用接口insert_one(),参数是字典格式。

import pymongo

myclient=pymongo.MongoClient('mongodb://localhost:27107/')
mydb=myclient['runoobdb']
mycol=mydb['sites']

mydict={'name':'RUNOOB','url':'www.baidu.com'}

x=mycol.insert_one(mydict)
print(x)

# 插入数据后得到返回的InsertOneResult对象,包含inserted_id,它是插入文档的id值。
print(x.inserted_id)

集合中插入多个文档使用insert_many()接口,参数是字典列表。

import pymongo

myclient=pymongo.MongoClient('mongodb://localhost:27107/')
mydb=myclient['runoobdb']
mycol=mydb['sites']

mylist = [
  { "name": "Taobao", "alexa": "100", "url": "https://www.taobao.com" },
  { "name": "QQ", "alexa": "101", "url": "https://www.qq.com" },
  { "name": "Facebook", "alexa": "10", "url": "https://www.facebook.com" },
  { "name": "知乎", "alexa": "103", "url": "https://www.zhihu.com" },
  { "name": "Github", "alexa": "109", "url": "https://www.github.com" }
]

x=mycol.insert_many(mylist)

#输出插入的所有文档对应的 _id 值
print(x.inserted_ids)

插入指定 _id 的多个文档

import pymongo

myclient=pymongo.MongoClient('mongodb://localhost:27107/')
mydb=myclient['runoobdb']
mycol=mydb['site2']

mylist = [
  { "_id": 1, "name": "RUNOOB", "cn_name": "菜鸟教程"},
  { "_id": 2, "name": "Google", "address": "Google 搜索"},
  { "_id": 3, "name": "Facebook", "address": "脸书"},
  { "_id": 4, "name": "Taobao", "address": "淘宝"},
  { "_id": 5, "name": "Zhihu", "address": "知乎"}
]

x=mycol.insert_many(mylist)

# 输出文档对应的  _id  值
print(x.inserted_ids)

二、查询数据

查询一条数据:使用 find_one() 方法来查询集合中的一条数据,如查询sites文档中的第一条数据。

import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]
 
x = mycol.find_one()
 
print(x)

# 输出结果
{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'RUNOOB', 'alexa': '10000',
 'url': 'https://www.runoob.com'}

查询集合中的所有数据find() 方法可以查询集合中的所有数据,类似SQL中的 select * 操作。

如:

import pymongo

myclient=pymongo.MongoClient('mongodb://localhost:27107/')
mydb=myclient['runoobdb']
mycol=mydb['sites']

for x in mycol.find():
    print(x)

# 输出结果
{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'RUNOOB', 'alexa': '10000', 'url': 'https://www.runoob.com'}
{'_id': ObjectId('5b2369cac315325f3698a1cf'), 'name': 'Google', 'alexa': '1', 'url': 'https://www.google.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'alexa': '100', 'url': 'https://www.taobao.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb7'), 'name': 'QQ', 'alexa': '101', 'url': 'https://www.qq.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb8'), 'name': 'Facebook', 'alexa': '10', 'url': 'https://www.facebook.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb9'), 'name': '知乎', 'alexa': '103', 'url': 'https://www.zhihu.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbba'), 'name': 'Github', 'alexa': '109', 'url': 'https://www.github.com'}

查询指定字段的数据:还是采用 find()方法,只不过将要返回的字段设置为1.

如:

import pymongo

myclient=pymongo.MongoClient('mongodb://localhost:27107/')
mydb=myclient['runoobdb']
mycol=mydb['sites']

for x in mycol.find({},{'_id':0,'name':1,'alexa':1})
    print(x)

# 输出结果
{'name': 'RUNOOB', 'alexa': '10000'}
{'name': 'Google', 'alexa': '1'}
{'name': 'Taobao', 'alexa': '100'}
{'name': 'QQ', 'alexa': '101'}
{'name': 'Facebook', 'alexa': '10'}
{'name': '知乎', 'alexa': '103'}
{'name': 'Github', 'alexa': '109'}

注意:除了 _id ,怒能在一个对象中同时指定0和1,如果一个字段为0,则其他都为1,反之亦然。

如,除了alexa 字段外,其他都返回:

import pymongo

myclient=pymongo.MongoClient('mongodb://localhost:27107/')
mydb=myclient['runoobdb']
mycol=mydb['sites']

for x in mycol.find({},{'alexa':0})
    print(x)


# 输出结果
{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'RUNOOB', 'url': 'https://www.runoob.com'}
{'_id': ObjectId('5b2369cac315325f3698a1cf'), 'name': 'Google', 'url': 'https://www.google.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'url': 'https://www.taobao.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb7'), 'name': 'QQ', 'url': 'https://www.qq.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb8'), 'name': 'Facebook', 'url': 'https://www.facebook.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbb9'), 'name': '知乎', 'url': 'https://www.zhihu.com'}
{'_id': ObjectId('5b236aa9c315325f5236bbba'), 'name': 'Github', 'url': 'https://www.github.com'}

指定条件查询:在 find()中设置参数来过滤数据。

import pymongo

myclient=pymongo.MongoClient("mongdb://localhost:27107/')
mydb=myclient['runoobdb']
mycol=mydb['sites']

query={"name":"RUNOOB"}

result=mycol.find(query)

for x in resutl:
    print(x)

# 输出结果
{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'RUNOOB', 'alexa': '10000', 'url': 'https://www.runoob.com'}

返回指定条目数:采用 limit(),如  mycol.find().limit(3)

正则表达式查询:如读取 name字段中,首字母为 R的数据,正则表达式修饰符条件为 {"$regex":"^R"}

query={'name':{'$regex':'^R'}}
result=mycol.find(query)

for x in result:
    print(x)

三、修改数据

单条数据修改,使用 update_one() 接口,查询到第一个匹配的数据,并修改。如,将alexa字段的值由10000改为12345。

import pymongo
 
myclient = pymongo.MongoClient("mongodb://localhost:27017/")
mydb = myclient["runoobdb"]
mycol = mydb["sites"]

myquery = { "alexa": "10000" }
newvalues = { "$set": { "alexa": "12345" } }
 
mycol.update_one(myquery, newvalues)
 
# 输出修改后的  "sites"  集合
for x in mycol.find():
  print(x)

多条数据修改,使用 update_many(),如查找F开头的name字段,并将查到的alexa字段修改为123:

import pymongo

myclient=pymongo.MongoClient('mongodb:localhost:27107/')
mydb=myclient['runoob']
mycol=mydb['sites']

myquery={'name':{'$regex':'^F'}}
newvalues={'$set':{'alexa':'123'}}

x=mycol.update_many(myquery,newvalues)
print(x.modified_count,'文档已修改')

四、删除数据

删除单条数据,查询到第一个匹配的对象,并删除:

import pymongo

myclient=pymongo.MongoClient('mongodb:localhost/')
mydb=myclient['runoobdb']
mycol=mydb['sites']

myquery={'name':'Taobao'}

mycol.delete_one(myquery)

# 删除后输出
for  x in mycol.find():
    print(x)

删除多个文档,使用delete_many() ,采用正则查询,并删除,如删除name字段中以F开头的文档:

import pymongo

myclient=pymongo.MongoClient('mongodb://localhost:27107/')
mydb=myclient['runoobdb']

mycol=mydb['sites']

myquery={'name':{'$regex':'^F'}}

x=mycol.find_many(mysquery)
print(x.delete_count,'个文档已删除')

删除集合中的所有文档,不需要指定字段,用{}代替即可:

import pymongo

myclient=pymongo.MongoClient('mongodb://localhost:27107/')
mydb=myclient['runoobdb']
mycol=mydb['sites']

mycol.delete_many({})

print(x.deleted_count,'个文档已删除')

删除结合,使用drop()接口即可

import pymongo

myclient=pymongo.MongoClient('mongodb://localhost:27107/')
mydb=myclient['runoobdb']
mycol=mydb['sites']

mycol.drop()

五、查看表

操作方式与mysql类似,

# 切换数据库
use runoobdb;

# 查看所有数据表
show tables;

 

你可能感兴趣的:(MongoDB)