mongodb
mongodb 属于NoSql 数据库,与关系型数据库大不同,对比mysql进行学习
SQL | MONGO | 说明 |
database | db | 数据库 |
table | collection | 数据库表/ 集合 |
row | document | 数据行/ 文档 |
column | field | 数据字段/ 域 |
index | index | 索引 |
primary key | primary key | 主键,mongo 自动将_id 字段设置为主键 |
MongoDB 常见数据类型
创建删除(数据库)
MongoDb 中的collection 和 数据库都是惰性创建的,在插入第一个文档后,才会创建
use python (如果不存在,则创建。 )
show dbs
db.python.insert({'url': 'www.google.com'})
db.dropDatabase()
增山改查
增加
MongoDB 使用insert() 或 save() 方法插入数据
db.COLLECTION_NAME.insert()
> db.python.insert({title: 'python', likes: 100})
WriteResult({ "nInserted" : 1 })
查找
db.COLLECTION_NAME.find()
db.COLLECTION_NAME.find().pretty()
条件语句和操作符
find()方法可以传入多个键,实现and条件
db. COLLECTION_NAME.find({key1:value1, key2:value2}).pretty()
> db.python.find({'likes':{$gte:100}, 'title':'python'}).pretty()
{
"_id" : ObjectId("5977eee9176609dfd3e4f6eb"),
"title" : "python",
"likes" : 100
}
实现or条件
db.COLLECTION_NAME.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
> db.python.find({$or:[{'likes':{$gte:100}},{'title': 'python'}]})
{ "_id" : ObjectId("5977eee9176609dfd3e4f6eb"), "title" : "python", "likes" : 100 }
更新文档
update
db.collection.update(
query,
update,
{
upsert: boolean
multi: boolean
writeConcern: document
}
)
- query: update 查询的条件
- update: update的对象和一些更新操作符
- upsert: 如果不存在update的记录,true插入,默认false
- multi: 默认false, 更新第一条记录,true更新符合条件的多条记录
- writeConcern: 抛出异常级别
> db.python.update({'title': 'python'}, {$set: {'title': 'python爬虫'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
save
通过传入的文档替换已有的文档
db.collection.save(
document,
{
writeConcern: document
}
)
> db.python.save({
... 'title': 'monogodb',
... 'likes': 100
... })
WriteResult({ "nInserted" : 1 })
删除
db.collection.remove(
query,
{
justOne: boolean,
writeConcern: document
}
)
- query 删除条件
- justOne 可选,如果设置为True,删除一个文档
> db.python.remove({'likes':{$gte:100}})
python操作MongoDB
pip install pymongo
建立连接
常见的三种形式
- client=pymongo.MongoClient()
- client=pymongo.MongoClient(’localhost‘,27017)
- client=pymongo.MongoClient(’mongodb://localhost:27017/‘)
获取数据库
db = client.pySpider
db = client['pySpider']
获取集合(表)
collection = db.python
collection = db['python']
增删改查
增加
>>> book = {'author':'Tom', 'text': 'hello world'}
>>> collection = db.python
>>> book_id = collection.insert(book)
>>> book_id
ObjectId('597806dde9856319a976ca6a')
批量插入
>>> books = [{"author": "Mike",
... "text": "My first book!",
... "tags": ["爬虫", "python", "网络"],
... "date": datetime.datetime.utcnow()
... },{"author": "qiye",
... "text": "My sec book!",
... "tags": ["hack", "python", "渗透"],
... "date": datetime.datetime.utcnow()
... }]
>>> books_id = collection.insert(books)
>>> books_id
[ObjectId('5978076ee9856319a976ca6b'), ObjectId('5978076ee9856319a976ca6c')]
查询
find_one() 没有匹配返回None
>>> collection.find_one({'author': 'Mike'})
{'text': 'My first book!', 'author': 'Mike', 'date': datetime.datetime(2017, 7, 26, 3, 7, 5, 111000), '_id': ObjectId('5978076ee9856319a976ca6b'), 'tags': ['爬虫', 'python', '网络']}
多条查询
也可以传入限制查询条件
>>> for book in collection.find():
... print(book)
查询符合条件的文档数量
>>> collection.find().count()
3
修改
>>> collection.update({'author':'Tom'}, {"$set":{"text": "python book"}})
{'ok': 1, 'nModified': 1, 'updatedExisting': True, 'n': 1}
删除
>>> collection.remove({"author":"Tom"})
{'ok': 1, 'n': 1}