MongoDB Python驱动
使用pip install pymongo安装
1.连接MongoDB实例
In[60]:frompymongoimportMongoClientIn[61]:client=MongoClient('mongodb://10.10.41.25:2911')In[62]:client=MongoClient('10.10.41.25',2911)
两种写法都行
2.获取数据库信息
In[63]:db=client.gameIn[64]:db=client['game']
两种写法都行
3.获取集合信息
In[85]:collection=db.playerIn[86]:collection=db['player']
两种写法都行
4.插入一个文档记录
MongoDB以JSON格式存储和显示数据。在pymongo中以字典的方式显示数据。
In[95]:importdatetimeIn[96]:post={"author":"Mike","text":"Myfirstblogpost!","tags":["mongodb","python","pymongo"],"date":datetime.datetime.utcnow()}
In[132]:posts=db.postsIn[133]:post_id=posts.insert(post)In[134]:post_idOut[134]:ObjectId('550ad8677a50900165feae9d')
当插入一个文档时,一个特殊的key,"_id"将自动添加到这个文档中。
In[136]:db.collection_names()Out[136]:[u'system.indexes',u'posts']
5.使用find_one()获取单个文档
In[141]:posts.find_one()Out[141]:{u'_id':ObjectId('550ad8677a50900165feae9d'),u'author':u'Mike',u'date':datetime.datetime(2015,3,19,14,7,14,572000),u'tags':[u'mongodb',u'python',u'pymongo'],u'text':u'Myfirstblogpost!'}In[142]:posts.find_one({"author":"Mike"})Out[142]:{u'_id':ObjectId('550ad8677a50900165feae9d'),u'author':u'Mike',u'date':datetime.datetime(2015,3,19,14,7,14,572000),u'tags':[u'mongodb',u'python',u'pymongo'],u'text':u'Myfirstblogpost!'}In[143]:posts.find_one({"author":"Eliot"})In[144]:
MongoDB以BSON格式存储字符,而BSON字符串是以UTF-8编码,所以PyMongo必须要确保它存储的数据是有效的UTF-8编码的数据。常规字符串直接存储,但是经过编码的字符串首先以UTF-8编码存储。
6.使用ObjectID查找文档
In[151]:post_idOut[151]:ObjectId('550ad8677a50900165feae9d')In[152]:posts.find_one({"_id":post_id})Out[152]:{u'_id':ObjectId('550ad8677a50900165feae9d'),u'author':u'Mike',u'date':datetime.datetime(2015,3,19,14,7,14,572000),u'tags':[u'mongodb',u'python',u'pymongo'],u'text':u'Myfirstblogpost!'}
ObjectID和它表示的字符串不一样
In[154]:post_id_as_str=str(post_id)In[155]:posts.find_one({"_id":post_id_as_str})
没有任何结果显示
在一些WEB应用中,需要更加URL获取post_id进而根据post_id查找匹配的文档。在使用find_one()查找之前有必要将post_id从字符串转换成为ObjectID
7.批量插入文档数据
>>>new_posts=[{"author":"Mike",..."text":"Anotherpost!","tags":["bulk","insert"],"date":datetime.datetime(2009,11,12,11,14)},{"author":"Eliot","title":"MongoDBisfun","text":"andprettyeasytoo!","date":datetime.datetime(2009,11,10,10,45)}]>>>posts.insert(new_posts)[ObjectId('...'),ObjectId('...')]
8.查询多个文档数据
In[165]:forpostinposts.find():post.....:.....:Out[166]:{u'_id':ObjectId('550ad8677a50900165feae9d'),u'author':u'Mike',u'date':datetime.datetime(2015,3,19,14,7,14,572000),u'tags':[u'mongodb',u'python',u'pymongo'],u'text':u'Myfirstblogpost!'}Out[166]:{u'_id':ObjectId('550b87d47a50907021e3473b'),u'author':u'Mike',u'date':datetime.datetime(2009,11,12,11,14),u'text':u'Anotherpost!'}Out[166]:{u'_id':ObjectId('550b87d47a50907021e3473c'),u'author':u'Eliot',u'title':u'MongoDBisfun'}
In[169]:forpostinposts.find({"author":"Mike"}):.....:post.....:.....:Out[169]:{u'_id':ObjectId('550ad8677a50900165feae9d'),u'author':u'Mike',u'date':datetime.datetime(2015,3,19,14,7,14,572000),u'tags':[u'mongodb',u'python',u'pymongo'],u'text':u'Myfirstblogpost!'}Out[169]:{u'_id':ObjectId('550b87d47a50907021e3473b'),u'author':u'Mike',u'date':datetime.datetime(2009,11,12,11,14),u'text':u'Anotherpost!'}
9.总计
In[170]:posts.count()Out[170]:3In[171]:posts.find({"author":"Mike"}).count()Out[171]:2
10.范围查询
In[183]:d=datetime.datetime(2009,11,12,12)In[184]:forpostinposts.find({"date":{"$lt":d}}).sort("author"):.....:printpost.....:.....:{u'date':datetime.datetime(2009,11,12,11,14),u'text':u'Anotherpost!',u'_id':ObjectId('550b87d47a50907021e3473b'),u'author':u'Mike'}
11.索引
使用索引可以加快查询速度,缩小查询范围。
In[201]:posts.find({"date":{"$lt":d}}).sort("author").explain()["cursor"]Out[201]:u'BasicCursor'In[202]:posts.find({"date":{"$lt":d}}).sort("author").explain()["nscanned"]Out[202]:3
创建组合索引
In[241]:frompymongoimportASCENDING,DESCENDINGIn[242]:posts.create_index([("date",DESCENDING),("author",ASCENDING)])Out[242]:u'date_-1_author_1'In[243]:posts.find({"date":{"$lt":d}}).sort("author").explain()["nscanned"]Out[243]:1
12.
参考文档
http://api.mongodb.org/python/current/tutorial.html?_ga=1.58141740.722641156.1410499072
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。