Python-Mongodbストレージ

9494 ワード

非リレーショナル・データベース:NoSQLはキー値ペアに基づいており、SQLレイヤの解析を必要とせず、パフォーマンスが高い
       ,    Redis, Voldemort, Oracle BDB  。
      ,    Cassandra, HBase, Riak  。
      ,    CouchDB, MongoDB  。
     ,    Neo4J, InfoGrid, Infinite Graph 。

MongoDBストレージ:C++に基づいて作成され、JSONオブジェクトに似ています.
MongoDBデータベースの接続と基本的な挿入:
import pymongo

#       
# client = MondoClient('mongode://localhost:27017')
client = pymongo.MongoClient(host='localhost', port=27017)

#   School     
db = client.School
#       
collection = db.students

student = {
    'id': '17031010225',
    'name': 'Zhang',
    'age': 21,
    'gender': 'male'
}

#     
result = collection.insert(student)
#   _id       
print(result)

同時に複数のデータの挿入:
import pymongo

#       
# client = MondoClient('mongode://localhost:27017')
client = pymongo.MongoClient(host='localhost', port=27017)

#   School     
db = client.School
#       
collection = db.students

student1 = {
    'id': '17031010225',
    'name': 'Zhang',
    'age': 21,
    'gender': 'male'
}

student2 = {
    'id': '20170202',
    'name': 'Mike',
    'age': 21,
    'gender': 'male'
}

#           
result = collection.insert([student1, student2])
#   _id       
print(result)

insert_の使用を推奨one()とinsert_many():
import pymongo

#       
# client = MondoClient('mongode://localhost:27017')
client = pymongo.MongoClient(host='localhost', port=27017)

#   School     
db = client.School
#       
collection = db.students

student = {
    'id': '17031010225',
    'name': 'Zhang',
    'age': 21,
    'gender': 'male'
}

#     
result = collection.insert_one(student)
#   _id       
print(result)
print(result.inserted_id)

返されるのはinsertResultオブジェクトで、プロパティのメソッドを呼び出して取得できます.id
import pymongo

#       
# client = MondoClient('mongode://localhost:27017')
client = pymongo.MongoClient(host='localhost', port=27017)

#   School     
db = client.School
#       
collection = db.students

student1 = {
    'id': '17031010225',
    'name': 'Zhang',
    'age': 21,
    'gender': 'male'
}

student2 = {
    'id': '20170202',
    'name': 'Mike',
    'age': 21,
    'gender': 'male'
}

#           
result = collection.insert_many([student1, student2])
#   _id       
print(result)
print(result.inserted_ids)

同様に返されるタイプはinsertManyResultです
クエリーデータ:find_one()またはfind()メソッドはクエリーできます
import pymongo

#       
# client = MondoClient('mongode://localhost:27017')
client = pymongo.MongoClient(host='localhost', port=27017)

#   School     
db = client.School
#       
collection = db.students

#     
result = collection.find_one({'name': 'Mike'})

print(type(result))
print(result)

Objectldに基づいてクエリーできます.
from bson.objectid import ObjectId
import pymongo

#       
# client = MondoClient('mongode://localhost:27017')
client = pymongo.MongoClient(host='localhost', port=27017)

#   School     
db = client.School
#       
collection = db.students

#     
result = collection.find_one({'_id': ObjectId('5d236b5b530a6140405e7281')})

print(result)

複数の結果の検索:
from bson.objectid import ObjectId
import pymongo

#       
# client = MondoClient('mongode://localhost:27017')
client = pymongo.MongoClient(host='localhost', port=27017)

#   School     
db = client.School
#       
collection = db.students

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

print(results)
for result in results:
    print(result)

返される結果はCursorタイプで、ジェネレータに相当し、遍歴に使用できます.
条件を調べる必要があるデータ:
result = collection.find({'age': {'$gt': 20}})

$gtは比較記号で、より大きいことを意味します.
正規表現は一致します.
results = collection.find({'name': {'$regex': '^M.*'}})

≪カウント|Count|emdw≫:count()メソッドを呼び出すには、すべてのエントリ数を統計するなど、何個のデータをクエリーする必要がありますか.
count = collection.find().count()
print(count)

統計条件を満たすデータ:
count = collection.find({'age': 20}).count()
print(count)

ソート:sort()メソッドを呼び出し、入力ソートフィールドおよび昇降フラグを呼び出すことができます.
from bson.objectid import ObjectId
import pymongo

#       
# client = MondoClient('mongode://localhost:27017')
client = pymongo.MongoClient(host='localhost', port=27017)

#   School     
db = client.School
#       
collection = db.students

#     
results = collection.find().sort('name', pymongo.ASCENDING)
print([result['name'] for result in results])

昇順はpymongoです.ASCENDING降順はpymongo.DESCENDING
オフセット:いくつかの場所の要素を取得する
from bson.objectid import ObjectId
import pymongo

#       
# client = MondoClient('mongode://localhost:27017')
client = pymongo.MongoClient(host='localhost', port=27017)

#   School     
db = client.School
#       
collection = db.students

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

結果を取得する個数はlimit()メソッドで指定できます.
from bson.objectid import ObjectId
import pymongo

#       
# client = MondoClient('mongode://localhost:27017')
client = pymongo.MongoClient(host='localhost', port=27017)

#   School     
db = client.School
#       
collection = db.students

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

注意:データベースの数が非常に膨大な場合.データのクエリーに大きなオフセットを使用しないでください.メモリがオーバーフローする可能性があります.次のクエリを使用できます.
from bson.objectid import ObjectId
results = collection.find({'id': {'$gt': ObjectId('5d236b5b530a6140405e7280')}})

前回のクエリの記録に開始_idが作用する
更新:updata()メソッドによる更新
from bson.objectid import ObjectId
import pymongo

#       
# client = MondoClient('mongode://localhost:27017')
client = pymongo.MongoClient(host='localhost', port=27017)

#   School     
db = client.School
#       
collection = db.students

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

ここで、nModifiedは影響するデータバーの数を表す
またKaTeX parse error:Expected'}',got'EOF'at end of input:...(condition,{'set':student})
またupdate()メソッドも公式には推奨されていません.推奨update_one()とupdate_manyの方法ですが、使い方はもっと厳しいです.
from bson.objectid import ObjectId
import pymongo

#       
# client = MondoClient('mongode://localhost:27017')
client = pymongo.MongoClient(host='localhost', port=27017)

#   School     
db = client.School
#       
collection = db.students

#         
condition = {'name': 'Zhang'}
#      
student = collection.find_one(condition)
student['age'] = 109
#   update      
result = collection.update_one(condition, {'$set': student})
print(result)
print(result.matched_count, result.modified_count)

パラメータは{'$set':student}の形式でmatched_を使用する必要があります.count一致するエントリ数modified_を取得count影響を受けるデータの取得
import pymongo

#       

client = pymongo.MongoClient(host='localhost', port=27017)

#   School     
db = client.School
#       
collection = db.students

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

update_many()メソッドは、条件を満たすすべてのデータを更新します.
import pymongo

#       

client = pymongo.MongoClient(host='localhost', port=27017)

#   School     
db = client.School
#       
collection = db.students

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

print(result.matched_count, result.modified_count)

削除アクション:delete_one()とdelete_many()
import pymongo

#       

client = pymongo.MongoClient(host='localhost', port=27017)

#   School     
db = client.School
#       
collection = db.students

result = collection.delete_one({'name': 'Mike'})
print(result)
print(result.deleted_count)

result = collection.delete_many({'age': {'$lt':25}})
print(result.deleted_count)

delete_one()条件を満たす最初のデータdeleteを削除するmany()条件を満たすすべてのデータを削除する
拡張: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/.