MongoDB

认识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(文档)
image.png

MongoDB进入与退出

mongo
exit

库、集合操作

库级操作语句

查看所有数据库(空库不会显示)show dbs
image.png
切换/创建数据库use 数据库
image.png
  • use:有就切换,没有就创建
查看当前所在库db
image.png
删除当前数据库:db.dropDatabase()
image.png

集合操作

查看当前数据库的集合 show collections
创建集合 (用引号引起来) db.createCollection(name, options)
删除集合db.集合名称.drop()
image.png

文档操作

插入
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},
])
image.png
查询
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}})

练习

  1. 将MongoDB的find, insert, update, remove方法封装成类。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容