认识mongodb
- MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
- MongoDB中将数据存储为一个文档,文档由键值对(key=>value)组成,MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。
MongoDB简介
- 基于分布式文件存储的开源数据库系统。
- 旨在为WEB应用提供可扩展的高性能数据存储解决方案。
- 将数据存储为一个文档,文档类似与Json格式。
{
name:"小明",
age:16,
address: {city:"长沙", country:"china"}
}
MongoDB数据模型
- 和关系型数据库一样,MongoDB存在数据库的概念,一个MongoDB可以创建多个数据库。
- 多个键及其关联的值有序地放置在一起就是文档,文档时MongoDB中数据的基本单元,是MongoDB的核心概念,很类似关系数据库中的行(记录)。
- 集合就是一组文档的组合,集合可以被看作关系型数据库中的表。
RDBMS(关系型数据库管理系统) |
MongoDB |
Database(数据库) |
Database(数据库) |
Table(表) |
Collection(集合) |
Record(记录) |
Document(文档) |
MongoDB进入与退出
mongo
exit
库、集合操作
库级操作语句
查看所有数据库(空库不会显示)show dbs
切换/创建数据库use 数据库
查看当前所在库db
删除当前数据库:db.dropDatabase()
集合操作
查看当前数据库的集合 show collections
创建集合 (用引号引起来) db.createCollection(name, options)
删除集合db.集合名称.drop()
文档操作
插入
db.集合名称.insert(document)
#插入文档, 集合不存在会自动创建, 不能插入重复id的数
#_id 是12个字节十六进制数在一个集合的每个文档是唯一的。如果不指定_id参数,MongoDB会为文档分配一个唯一的ObjectId
db.student.insert({name:'xiaobai'})
db.student.insert({name:'xiaobai', age:18})
db.student.insert({_id:1, name:'xiaobai', age:18})
#一次性插入多个
db.student.insert([
{name:'juhao', sex:'男', age:18},
{name:'nanbei', sex:'男', age:19},
{name:'budong', sex:'男', age:20},
])
查询
db.集合名称.find() #查询所有
db.集合名称.find().pretty() #结构化显示
db.集合.find({name:10}).pretty() where name = 10
db.集合.find({name:{$ne:10} }).pretty() where name != 10
db.集合.find({name:{$gt:10} }).pretty() where name > 10
db.集合.find({name:{$lt:10} }).pretty() where name < 10
#后面加个e就是加等于
#and逻辑
{$and:[{expression1}, {expression1}, ...] }
#or逻辑
{$or:[{expression1}, {expression1}, ...] }
#where sex='男' and age > 18
db.table.find({
$and:[
{sex:'男'}, {age:{$gt:18}}
]
})
#where sex='女' or age =18
db.table.find({
$or:[
{sex:'女'}, {age:18}
]
})
操作符 |
描述 |
$ne |
不等于 |
$gt |
大于 |
$lt |
小于 |
$gte |
大于等于 |
$lte |
小于等于 |
更新
db.table.insert({
name: 'juhao',
age: 18,
height: 180,
sex:'男',
virtue: ['帅', '帅', '帅'],
})
db.table.update({sex:'男'},[{age:20},{height:180}])
#更新第一条找到的文档全部值
db.table.update({sex:'男'}, {$set:{age:666, agee:6666}})
#修改第一条找到的文档, key不存在就添加
db.table.update({sex:'男'}, {$set:{sex:'女'}}, {multi:true}) #更新满足条件的全部数据
#前面查询的条件也可以用在这里, wherer sex=男 and age>18
db.table.update(
{$and:[{sex:'男'}, {age:{$gt:18}}]},
{$set:{age:666}},
)
删除
db.集合名称.remove( <query>, <justOne> )
db.table.remove({age:18}) #删除所有满足条件的
db.table.remove({sex:'男'}, {justOne:true}) #删除一条
#where sex='男' and age>18
db.table.remove({
$and:[
{sex:'男'}, {age:{$gt:18}}
]
})
Python与MogoDB交互
操作步骤
pip install pymongo
- 建立连接:
client = pymongo.MongoClient()
- 指定数据库:
db = client[数据库名]
- 指定集合:
collection=db[集合名]
基本使用
import pymongo
#建立连接:
client = pymongo.MongoClient()
#指定数据库:
db = client['cainiao']
#指定集合:
collection = db['student']
#查找一条文档:
result = collection.find_one()
print(result)
#查找所有:
all = collection.find()
print(all)
print(list(all))
#添加一条文档:
add_result = collection.insert_one({'name':'xiaotan','age':18})
print(add_result)
#添加多条:
add_result_all = collection.insert_many([{'name': 'xiao1', 'age': 18}, {'name': 'xiao2', 'age': 18}])
print(add_result_all)
#删除一条文档:
del_result = collection.delete_one({'age': 18}) #删除age=18的一条文档
print(del_result)
#删除多条:
del_result_all = collection.delete_many({'age': 18})#删除age=18的全部文档
print(del_result_all)
#修改一条文档:
collection.update_one({'age': 19},{'$set':{'name':'cainiao110'} }) #将age=19的第一条记录,修改name指,记住要用$set
#修改多条:update_many()
collection.update_many({'name':{'$ne':'xiaobai'}}, {'$set': {'age': 19}})
练习
- 将MongoDB的find, insert, update, remove方法封装成类。