[MongoDB学习笔记]

本文总阅读量

这是我在学习MongoDB时的学习笔记,并且结合Python调用mongodb数据库

MongoDB 基础

1.SQL概念和MongoDB概念对比

SQL概念 MongoDB概念 说明
database database 数据库
table collection 数据库表/集合
row document 数据行/文档
column field 数据字段列/域
index index 索引
primary kye primery key 主键,MongoDB 自动将_id字段设置为主键

2.创建/删除数据库

创建数据库的语法:

1
use DATABASE_NAME

如果数据库不在则创建数据库,否则切换到指定数据库
查看所有数据库:

1
show dbs

删除数据库(删除当前数据库):

1
db.dropDatabase()

创建数据库再删除示例

3.集合中文档的增删改查

插入文档

1
2
3
4
5
6
7
8
db.COLLECTION_NAME.insert(document)
示例:
>db.python.insert({title: 'python',
description: '动态语言' ,
url: 'http://www.python.org',
tag: ['动态', '编程', '脚本'],
likes: 100
})

以上示例中python是我们的集合名称,如果该集合不在该数据库中,MongoDB会自动创建该集合并插入文档。插入的数据必须符合json格式

查询文档

1
2
3
db.COLLECTION_NAME.find().pretty()
示例代码:
db.python.find()

pretty()只是以易读的方式来读取数据,可以不加

MongoDB中的条件语句和操作符
操作 格式 示例
等于 {<key>:<value>} db.python.find({“likes”:100}).pretty()
小于 {<key>:$lt<value>} db.python.find({“likes”:{$lt:100}}).pretty()
小于或等于 {<key>:$lte<value>} db.python.find({“likes”:{$lte:100}}).pretty()
大于 {<key>:$gt<value>} db.python.find({“likes”:{$gt:100}}).pretty()
大于或等于 {<key>:$gte<value>} db.python.find({“likes”:{$gte:100}}).pretty()
不等于 {<key>:$ne<value>} db.python.find({“likes”:{$ne:100}}).pretty()

查询中的and和or

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
通过find()的方法传入多个key,实现and
>db .COLLECTION_NAME.find({key1:value1, key2:value2}).pretty()
查找python集合中likes大于等于100切title等于python的文档,示例如下:
>db.python.fing({"like": {$gte:100}, "title"::"python"}).pretty()
通过“$or”关键字实现or条件语句
查找集合中likes大于等于199或者title等于python的文档,示例如下:
>db.python.find(
{
$or: {
{"likes":{$gte:100}},{"title":"python"}
}
}
).pretty()
联合使用andor
>db.python.find({"like": {$gt:50}, $or: [{"description":"动态语言"},{"title":"python"}]}).pretty()

更新文档
把title的Python改为Python爬虫,multi默认为false,只更新找到的第一条记录,如果参数为true,就按条件查出来多条记录全部更新,还有一个upse参数,这个参数模式为false,如果设置为true,则如果不存在update记录就插入新的文档

1
2
示例:
>db.python.update({'title':'python'},{$set:{'title':'Python爬虫'}},{multi:ture})

删除文档
参数justOne如果设置为true或1,则只删除一个文档

1
2
示例:
>db.python.remove({'tit;e’:'Mongodb'})

4.Python操作mongodb

建立连接

1
2
3
client= pymongo.MongoClient()  #连接默认的主机ip 和端口
client= pymongo.MongoClient('localhost',27017) #显式指定ip和端口
client= pymongo.MongoClient('mongodb://localhost:27017/') #采用url格式进行连接

获取数据库

1
2
3
db = client.papers
如果数据库名字导致属性访问方式不能用(比如pa-pers),可以通过字典的方式访问数据库,示例:
db = client['pa-pers']

获取一个集合

1
2
3
collection = db.books
或者:
collection = db['books']

插入文档
数据在MongoDB中是以JSON文件形式保存的。在pymongo中用字典的形式来代表文档,使用insert()插入文档

1
2
3
4
5
6
示例:
book ={"author": "mike",
"text":"My first book!",
"tags":["爬虫", "python", "网络"],
"data":datatime.tatatime.utcnow()
book_id = coolection.insert(book)

查询文档

1
2
3
4
5
6
collection.find_one() #返回一个符合条件的字典类型值可以修改find_on({''author": "mike"})来进行匹配查询
如果想获取多个文档,可以使用find()方法。find()返回一个Cursor实例,调用如下:
for book in collection.find({"author": "mike"}):
print book
如果想知道符合查询条件的文件有多少可以用count()操作,示例:
collection.find({"author":"mike"}).count()

修改、删除文档

1
2
collection.update({"author":"mike"},{"$set":{"text":"python book"}})  #修改文档
collection.remove({"author":"mike"})
查看评论