pymongoの使用例(超微細)

20016 ワード

MongoDBストレージ
ここでPython 3のMongoDBのストレージ操作を見てみましょう.本節が始まる前に、MongoDBがインストールされ、サービスが開始されていることを確認し、PythonのPyMongoライブラリがインストールされていることを確認してください.
接続MongoDB
MongoDBに接続するにはPyMongoライブラリの中のMongoClientを使用する必要があります.一般的にMongoDBのIPとポートに転送すればいいです.最初のパラメータはアドレスhostで、2番目のパラメータはポートportで、ポートが転送されなければデフォルトは27017です.
import pymongo
from pymongo import MongoClient


#client = MongoClient(host='localhost', port=270171)
conn = MongoClient("127.0.0.1", 27017)

これにより、MongoDBの接続オブジェクトを作成できます.また、MongoClientの最初のパラメータhostは、mongodbで始まるMongoDBの接続文字列を直接伝えることもできます.たとえば、client=MongoClient('mongodb://localhost:27017/')と同じ接続効果が得られます.
 
データベースの指定
MongoDBではデータベースも1つに分かれていますが、次にどのデータベースを操作するかを指定します.ここではtestデータベースを例に説明しますので、次にプログラムで使用するデータベースを指定する必要があります.
db = conn.beeswarm
#   client test      test   ,          :
db = client['test']
#         。

 
コレクションの指定、データの挿入(データベース・テーブルの作成)
MongoDBの各データベースには、リレーショナル・データベースのテーブルと同様に多くのコレクションが含まれています.次に、操作するコレクションを指定する必要があります.ここでは、students、学生コレクションというコレクションを指定します.指定したデータベースと同様に、セットを指定する方法も2つあります.
collection = db.baituser
collection = db['students']
#     ,               ,  students  Collection,          ,        :


baituser = {"username":"johnny", "password":"password"}
result = collection.insert_one(baituser)
print "    ", result
baituser = {"username":"julia", "password":"qweasd"}
result = collection.insert_one(baituser)
print "    ", result
#              、  、     ,         collection insert()        。
#  MongoDB ,          _id       ,        _id,MongoDB       ObjectId   _id  。
# insert()          _id 。


#     :
#
# 5932a68615c2606814c91f3d
#                ,            ,    :


"""
student1 = {
    'id': '20170101',
    'name': 'Jordan',
    'age': 20,
    'gender': 'male'
}
 
student2 = {
    'id': '20170202',
    'name': 'Mike',
    'age': 21,
    'gender': 'male'
}
 
result = collection.insert([student1, student2])
print(result)
"""
#          _id   ,    :
# [ObjectId('5932a80115c2606a59e8a048'), ObjectId('5932a80115c2606a59e8a049')]
#     PyMongo 3.X   ,insert()            ,             ,
#       insert_one() insert_many()              。

"""
student = {
    'id': '20170101',
    'name': 'Jordan',
    'age': 20,
    'gender': 'male'
}
 
result = collection.insert_one(student)
print(result)
print(result.inserted_id)
"""
#     :
# 
# 5932ab0f15c2606f0c1cf6c5
#      insert()    ,      InsertOneResult  ,       inserted_id    _id。
 
#   insert_many()  ,                ,    :
"""
student1 = {
    'id': '20170101',
    'name': 'Jordan',
    'age': 20,
    'gender': 'male'
}
 
student2 = {
    'id': '20170202',
    'name': 'Mike',
    'age': 21,
    'gender': 'male'
}
 
result = collection.insert_many([student1, student2])
print(result)
print(result.inserted_ids)
"""
# insert_many()        InsertManyResult,  inserted_ids           _id  ,    :
# 
# [ObjectId('5932abf415c2607083d3b2ac'), ObjectId('5932abf415c2607083d3b2ad')]

 
検索
#   ,           find_one() find()      ,find_one()         ,find()       。

for abc in collection.find():
    print abc
result = collection.find_one({"username":"johnny"})
print type(result)
print result


#          ObjectId   ,      bson    ObjectId。
from bson.objectid import ObjectId

result = collection.find_one({'_id': ObjectId('5d132e975689095c2afec36e')})
print(result)
#             ,    :
# {' ObjectId('593278c115c2602667ec6bae'), 'id': '20170101', 'name': 'Jordan', 'age': 20, 'gender': 'male'}
#       _id':         None。


#          ,      find()  ,          20   ,    :
#results = collection.find({'age': 20})


#          20   ,     :
#results = collection.find({'age': {'$gt': 20}})
#                     ,      ,        $gt,     ,   20,              20   

ここでは、比較記号を次の表にまとめます.
記号の意味例$ltが{'age':{'$lt':20}}$gtが{'age':{'$gt':20}}}$lteが{'age':{'$lte':20}}$gteが{'age':{'$gte':20}}$neが{'age':{'$ne':20}$inの範囲内{'age':{'$in':[20,23]}}$ninが範囲内にない
また、例えば、Mで始まる名前の学生データをクエリーするなど、正規マッチングクエリーを行うこともできます.例は以下の通りです.
results = collection.find({'name': {'$regex': '^M.*'}})

ここでは、いくつかの機能記号を次のように分類します.
記号の意味例例例例意味$regexマッチング正則{'name':{'$regex':'^M.*'}}name Mで始まる$exists属性が存在するか{'name':{'$exists':True}}name属性が存在する$typeタイプ判断{{age':{'$type':'int'}}ageのタイプがint$modデジタルモード操作{'age':{'$mod':{'$mod':[5,0]}}年齢モード5残り0$textテキストクエリ{'$text':{'$search':':':'Mike''''''''':{{{{{'Mike'''''''':{{{{{{{{}}textタイプの属性にMike文字列$where拡張条件クエリー{'$where':'obj.fans_count==obj.follows_count'}自身のファン数が注目数に等しい
これらの操作のより詳細な使い方は、MongoDBの公式ドキュメントで見つけることができます.https://docs.mongodb.com/manual/reference/operator/query/
 
カウント
#              ,    count()  ,         :
count = collection.find().count()
print "  ", count
#              :
count = collection.find({'age': 20}).count()
print(count)

 
ツールバーの
sortメソッドを呼び出すことができ、ソートのフィールドと昇降順フラグを入力すればよい.例は以下の通りである:pymongoを呼び出す.ASCENDING()とpymongo.DESCENDING()は、昇順でソートすることを指定します.
results = collection.find().sort('name', pymongo.ASCENDING)
print([result['name'] for result in results])

#     :
# ['Harden', 'Jordan', 'Kevin', 'Mark', 'Mike']

 
オフセット(Offset)
いくつかの要素だけを取りたいかもしれませんが、ここではskip()メソッドを使用していくつかの位置をオフセットすることができます.例えば、オフセット2では、前の2つの要素を無視して、3つ目以降の要素を得ることができます.
results = collection.find().sort('name', pymongo.ASCENDING).skip(2)
print([result['name'] for result in results])
#     :
# ['Kevin', 'Mark', 'Mike']

 
制限limit
results = collection.find().sort('name', pymongo.ASCENDING).skip(2).limit(2)
print([result['name'] for result in results])

#     :
# ['Kevin', 'Mark']
#     limit()         ,      ,   2     。

注目すべきは、データベース数が非常に膨大な場合、例えば千万、億レベルでは、大きなオフセット量を使用してデータをクエリーしないほうがよい.メモリオーバーフローを引き起こす可能性が高いので、find({'_id':{'$gt':ObjectId('593278 c 815 c 2678 bb 2 b 8 d')})のような方法でクエリーし、前回クエリーした_を記録することができる.id.
 
更新
データ更新にはupdate()メソッドを使用して、更新の条件と更新後のデータを指定します.たとえば、次のようにします.
condition = {'name': 'Kevin'}
student = collection.find_one(condition)
student['age'] = 25
result = collection.update(condition, student)
print(result)
#       name Kevin          ,        ,         ,    ,
#     update               ,         。

#     :
# {'ok': 1, 'nModified': 1, 'n': 1, 'updatedExisting': True}
#          ,ok       ,nModified         。


#   update()                ,      update_one()   update_many()  ,      ,
#          $            ,         。
condition = {'name': 'Kevin'}
student = collection.find_one(condition)
student['age'] = 26
result = collection.update_one(condition, {'$set': student})
print(result)
print(result.matched_count, result.modified_count)
#       update_one  ,                  ,      {'$set': student}     ,
#       UpdateResult  ,    matched_count modified_count                       。

#     :
#
# 
# 1 0


#         :
condition = {'age': {'$gt': 20}}
result = collection.update_one(condition, {'$inc': {'age': 1}})
print(result)
print(result.matched_count, result.modified_count)
#                 20,       {'$inc': {'age': 1}},                   1。

#     :
#
# 
# 1 1
#          1 ,      1 。


#     update_many()  ,               ,    :
condition = {'age': {'$gt': 20}}
result = collection.update_many(condition, {'$inc': {'age': 1}})
print(result)
print(result.matched_count, result.modified_count)

#            1  ,      :
#
# 
# 3 3
#                    。

 
削除
削除操作は比較的簡単で、remove()メソッドを直接呼び出して削除の条件を指定すればよく、条件に合致するすべてのデータが削除されます.例は以下の通りです.
result = collection.remove({'name': 'Kevin'})
print(result)

#     :
#
# {'ok': 1, 'n': 1}



#              ,delete_one() delete_many()  ,    :
result = collection.delete_one({'name': 'Kevin'})
print(result)
print(result.deleted_count)
result = collection.delete_many({'age': {'$lt': 25}})
print(result.deleted_count)

#     :
#
# 
# 1
# 4
# delete_one()             ,delete_many()            ,     DeleteResult  ,
#     deleted_count           。

 
その他
さらにPyMongoはfind_one_and_delete()、find_one_and_replace()、find_one_and_update()は,検索後の削除,置換,更新操作であり,上記の方法とほぼ一致する.また、create_などのインデックスを操作することもできます.index()、create_indexes()、drop_index()など.詳細については、公式ドキュメントを参照してください.http://api.mongodb.com/python/current/api/pymongo/collection.html
また、データベース、コレクション自体、およびその他の操作についても説明しません.公式ドキュメントを参照してください.http://api.mongodb.com/python/current/api/pymongo/
 
 
 
ソースtxt
#!/usr/bin/env python
# -*- coding:utf-8 -*-


"""
MongoDB  
             Python3 MongoDB     ,                 MongoDB       ,      Python
     PyMongo 。
 
  MongoDB
      MongoDB      PyMongo    MongoClient,      MongoDB IP     ,        host,
            port,         27017。
"""


import pymongo
from pymongo import MongoClient


#client = MongoClient(host='localhost', port=270171)
conn = MongoClient("127.0.0.1", 27017)



"""
           MongoDB      。  MongoClient      host      MongoDB      , mongodb  ,
  :client = MongoClient('mongodb://localhost:27017/')           。
"""


#      
# MongoDB          ,                    ,     test         ,       
#                。


db = conn.beeswarm


#   client test      test   ,          :
# db = client['test']
#         。


#     
# MongoDB              Collection,              ,               ,
#               students,    。          ,          。


collection = db.baituser
# collection = db['students']
#     ,               ,  students  Collection,          ,        :


baituser = {"username":"johnny", "password":"password"}
#result = collection.insert_one(baituser)
#print "    ", result
baituser = {"username":"julia", "password":"qweasd"}
#result = collection.insert_one(baituser)
#print "    ", result
#              、  、     ,         collection insert()        。
#  MongoDB ,          _id       ,        _id,MongoDB       ObjectId   _id  。
# insert()          _id 。


#     :
# 5932a68615c2606814c91f3d
#                ,            ,    :
"""
student1 = {
    'id': '20170101',
    'name': 'Jordan',
    'age': 20,
    'gender': 'male'
}
 
student2 = {
    'id': '20170202',
    'name': 'Mike',
    'age': 21,
    'gender': 'male'
}
 
result = collection.insert([student1, student2])
print(result)
"""
#          _id   ,    :
# [ObjectId('5932a80115c2606a59e8a048'), ObjectId('5932a80115c2606a59e8a049')]
#     PyMongo 3.X   ,insert()            ,             ,
#       insert_one() insert_many()              。

"""
student = {
    'id': '20170101',
    'name': 'Jordan',
    'age': 20,
    'gender': 'male'
}
 
result = collection.insert_one(student)
print(result)
print(result.inserted_id)
"""
#     :
# 
# 5932ab0f15c2606f0c1cf6c5
#      insert()    ,      InsertOneResult  ,       inserted_id    _id。
 
#   insert_many()  ,                ,    :
"""
student1 = {
    'id': '20170101',
    'name': 'Jordan',
    'age': 20,
    'gender': 'male'
}
 
student2 = {
    'id': '20170202',
    'name': 'Mike',
    'age': 21,
    'gender': 'male'
}
 
result = collection.insert_many([student1, student2])
print(result)
print(result.inserted_ids)
"""
# insert_many()        InsertManyResult,  inserted_ids           _id  ,    :
# 
# [ObjectId('5932abf415c2607083d3b2ac'), ObjectId('5932abf415c2607083d3b2ad')]


#   ,           find_one() find()      ,find_one()         ,find()       。
for abc in collection.find():
    print abc
result = collection.find_one({"username":"johnny"})
print type(result)
print result


#          ObjectId   ,      bson    ObjectId。
from bson.objectid import ObjectId

result = collection.find_one({'_id': ObjectId('5d132e975689095c2afec36e')})
print(result)
#             ,    :
# {' ObjectId('593278c115c2602667ec6bae'), 'id': '20170101', 'name': 'Jordan', 'age': 20, 'gender': 'male'}
#       _id':         None。


#          ,      find()  ,          20   ,    :
#results = collection.find({'age': 20})


#          20   ,     :
#results = collection.find({'age': {'$gt': 20}})
#                     ,      ,        $gt,     ,   20,              20   


#              :
"""
      
$lt  {'age': {'$lt': 20}}
$gt  {'age': {'$gt': 20}}
$lte    {'age': {'$lte': 20}}
$gte    {'age': {'$gte': 20}}
$ne   {'age': {'$ne': 20}}
$in    {'age': {'$in': [20, 23]}}
$nin     {'age': {'$nin': [20, 23]}}
"""


#              ,       M       ,    :
#results = collection.find({'name': {'$regex': '^M.*'}})


#                :
"""
          
$regex    {'name': {'$regex': '^M.*'}}name M  
$exists      {'name': {'$exists': True}}name    
$type    {'age': {'$type': 'int'}}age    int
$mod     {'age': {'$mod': [5, 0]}}   5 0
$text    {'$text': {'$search': 'Mike'}}text        Mike   
$where      {'$where': 'obj.fans_count == obj.follows_count'}          
"""

#               MongoDB      :
# https://docs.mongodb.com/manual/reference/operator/query/


#   
#              ,    count()  ,         :
count = collection.find().count()
print "  ", count
#              :
#count = collection.find({'age': 20}).count()
#print(count)


#   
#     sort  ,               ,    :
#    pymongo.ASCENDING() pymongo.DESCENDING()            
#results = collection.find().sort('name', pymongo.ASCENDING)
#print([result['name'] for result in results])
#     :
# ['Harden', 'Jordan', 'Kevin', 'Mark', 'Mike']


#   ,          ,       skip()        ,    2,    2   ,           。
#results = collection.find().sort('name', pymongo.ASCENDING).skip(2)
#print([result['name'] for result in results])
#     :
# ['Kevin', 'Mark', 'Mike']
#       limit()           ,    :


#   limit
#results = collection.find().sort('name', pymongo.ASCENDING).skip(2).limit(2)
#print([result['name'] for result in results])
#     :
# ['Kevin', 'Mark']
#     limit()         ,      ,   2     。


#       ,             ,   、   ,                ,          ,
#       find({'_id': {'$gt': ObjectId('593278c815c2602678bb2b8d')}})         ,        _id。


#   
#           update()  ,                ,  :
#condition = {'name': 'Kevin'}
#student = collection.find_one(condition)
#student['age'] = 25
#result = collection.update(condition, student)
#print(result)
#       name Kevin          ,        ,         ,    ,
#     update               ,         。

#     :
# {'ok': 1, 'nModified': 1, 'n': 1, 'updatedExisting': True}
#          ,ok       ,nModified         。


#   update()                ,      update_one()   update_many()  ,      ,
#          $            ,         。
#condition = {'name': 'Kevin'}
#student = collection.find_one(condition)
#student['age'] = 26
#result = collection.update_one(condition, {'$set': student})
#print(result)
#print(result.matched_count, result.modified_count)
#       update_one  ,                  ,      {'$set': student}     ,
#       UpdateResult  ,    matched_count modified_count                       。

#     :
#
# 
# 1 0


#         :
#condition = {'age': {'$gt': 20}}
#result = collection.update_one(condition, {'$inc': {'age': 1}})
#print(result)
#print(result.matched_count, result.modified_count)
#                 20,       {'$inc': {'age': 1}},                   1。

#     :
#
# 
# 1 1
#          1 ,      1 。


#     update_many()  ,               ,    :
#condition = {'age': {'$gt': 20}}
#result = collection.update_many(condition, {'$inc': {'age': 1}})
#print(result)
#print(result.matched_count, result.modified_count)

#            1  ,      :
#
# 
# 3 3
#                    。


#   
#         ,    remove()           ,              ,    :
#result = collection.remove({'name': 'Kevin'})
#print(result)

#     :
#
# {'ok': 1, 'n': 1}


#               ,delete_one() delete_many()  ,    :
#result = collection.delete_one({'name': 'Kevin'})
#print(result)
#print(result.deleted_count)
#result = collection.delete_many({'age': {'$lt': 25}})
#print(result.deleted_count)

#     :
#
# 
# 1
# 4
# delete_one()             ,delete_many()            ,     DeleteResult  ,
#     deleted_count           。


#   
#   PyMongo          , find_one_and_delete()、find_one_and_replace()、find_one_and_update(),
#        、  、    ,           。
 
#             , create_index()、create_indexes()、drop_index() 。
 
#             :http://api.mongodb.com/python/current/api/pymongo/collection.html

#         、             ,        ,    
#     :http://api.mongodb.com/python/current/api/pymongo/