1.首先是下载安装MongoDB以及MongoDB Compass
MongoDB的下载地址是:https://www.mongodb.com/download-center/community
安装过程可以参考:http://www.runoob.com/mongodb/mongodb-window-install.html
注:安装过程中提示安装MongoDB Compass,需要取消勾选,后期再安装,安装地址是:https://www.mongodb.com/download-center/compass
Compass 能够帮助我这种小白很容易的了解里面的数据结构,以及直观的看到命令的效果是什么样子的。
新版本的MongoDB不需要安装 MongoDB服务,可以直接在bin文件夹下,先运行
mongod.exe,然后再运行mongo.exe,在弹出的界面中输入db,接着能够弹出啊test,基本上运行就没有问题了
2.基本的使用
2.1创建连接
from pymongo import MongoClient
client=MongoClient('localhost',27017)
client = MongoClient('mongodb://localhost:27017/')#另一种创建的方式
2.2创建数据库
#这里面的test_database是我们自己定义的数据库的名称,执行该命令后系统会在内部建立一个新的以test_database命名的数据库
db = client.test_database
db = client['test-database']#另一种创建方式
2.3创建一个collection
#同上,test_collection也是我们自己定义的collection名称,系统会在test_database下创建一个名为test_collection的collection。
collection = db.test_collection
collection = db['test-collection']#另一种创建方式
2.4创建文档
post = {"author": "Mike", "tags": ["mongodb", "python", "pymongo"]}
collection.insert(post)
#如果该命令再执行一次,则会有如下报错
#pymongo.errors.DuplicateKeyError: E11000 duplicate key error collection
#但是如果是使用collection.insert({'url':"http://...","html":"....."})则可以插入很多次
2.4.1创建文档
#使用这种方式,会直接新建一个名称为webpage的collection。
db.webpage.insert({'url':"http://....",'html':'............'})
如果该命令再执行一遍,不会提示报错,但是id会不一样。
db.webpage.insert({'url':"http://....",'html':'............'})
2.4.2更新内容update
这里面涉及到MongoDB的院子操作,见:http://www.runoob.com/mongodb/mongodb-atomic-operations.html
其中的$set,用来指定一个键并更新键值,若键不存在并创建。
手册中的是update_one,之前的update现在已经不用了,不过指令中使用update也没有报错。
update(spec, document, upsert=False, manipulate=False, multi=False, check_keys=True, **kwargs)
Update a document(s) in this collection.
DEPRECATED - Use replace_one(), update_one(), or update_many() instead.
Changed in version 3.0: Removed the safe parameter. Pass w=0 for unacknowledged write operations.
db.posts.update({'naqwme': 'wu'},{"$set":{"naqwme":"leo-wu"}})
#结果{'n': 1, 'nModified': 1, 'ok': 1.0, 'updatedExisting': True}会将naqwme中的内容改成leo-wu。
db.posts.update({'naqwme': 'wu'},{"$set":{"name":"leo-wu"}})
#如果是上面的,由于搜索不到name,系统会将{"name":"leo-wu"}添加到数据中。
db.test_collection.update({'_id':url},{'$set':{'html':html}},upsert=True)
#该语句中添加了upsert,含义为如果没有匹配成功,则新建一个document。_id指定为url中的内容。
2.4.3replace_one
db.posts.replace_one({'naqwme': 'l23132eo-wu'},{"new":"wu"})
#该指令是将新文档{"new":"wu"}重新写入旧文档{'naqwme': 'l23132eo-wu'},相当于是覆盖,即使旧文档{'naqwme': 'l23132eo-wu'}含有其他的信息,也还是会被覆盖掉。得到的新文档只包含{"new":"wu"}
2.5查询一个文档find_one
collection.find_one()
#结果:{'_id': ObjectId('5cb7ecbd924f6d376cab760f'), 'author': 'Mike', 'tags': ['mongodb', 'python', 'pymongo']}
db.webpage.find_one()
#{'_id': ObjectId('5cb7f845924f6d376cab7614'), 'url': 'http://....', 'html': '............'}
collection.find_one({"author": "Mike"})
#{'_id': ObjectId('5cb7ecbd924f6d376cab760f'), 'author': 'Mike', 'tags': ['mongodb', 'python', 'pymongo']}
#通过id去查询,在插入数据的同时,需要返回id参数
posts = db.posts
post_id = posts.insert_one(post).inserted_id#返回id参数,供后期查询使用
posts.find_one({"_id": post_id})
#{'_id': ObjectId('5cb7ecbd924f6d376cab760f'), 'author': 'Mike', 'tags': ['mongodb', 'python', 'pymongo']}
#或者使用如下方法,前提是需要使用objectId
from bson.objectid import ObjectId
collection.find_one('_id': ObjectId('5cb7ecbd924f6d376cab760f'))
2.6查询多个文档
import pprint
for doc in db.webpage.find():
pprint.pprint(doc)
"""
{'_id': ObjectId('5cb7f845924f6d376cab7614'),
'html': '............',
'url': 'http://....'}
{'_id': ObjectId('5cb7f89c924f6d376cab7615'),
'html': '............',
'url': 'http://....'}
"""
2.7创建以及删除id
这个步骤不是必须的,只是可以让我们自己定义一个id,之前系统会自动生成一个id,如上所述就是“id”.本次新建的user_id可以在后期更方便的做数据处理。
import pymongo
result = db.posts.create_index([('user_id', pymongo.ASCENDING)],unique=True)
list(db.posts.index_information())
#结果:['_id_', 'user_id_1']多出一个user_is_1
db.posts.insert({'naqwme':"wu","gen34der":"male",'user_id':12})
#返回的结果:ObjectId('5cb804ed924f6d376cab7618')
db.webpage.drop_index('user_id_1')#删除id
2.8删除一个文档delete_one
db.posts.delete_one({"author":"M0ike"})#这里面的Mike我在compass单独修改了,变成了M0ike。
删除之前
2.9删除一个collection
db.drop_collection('webpage')
#结果:{'ns': 'test_database.webpage', 'nIndexesWas': 1, 'ok': 1.0}
2.10删除一个database
client.drop_database("test_database")