[Python3 / MongoDB] Fassen Sie Pymongo-Verarbeitungsaufrufe leicht zusammen

Überblick

Wie der Titel schon sagt.

Ich habe kürzlich angefangen, MongoDB zu verwenden, aber ich hatte Probleme, weil die Informationen auf verschiedenen Websites verteilt waren. Deshalb wollte ich "sammeln, was ich normalerweise verwende (` ・ ω ・ ´) ". Es ist ein Artikel.

Versions

$ python -V
Python 3.7.1

$ pip list | grep pymongo
pymongo                  3.9.0

Offizielles Tutorial

https://api.mongodb.com/python/current/tutorial.html Auch wenn Sie sich meinen Artikel nicht ansehen, ist dies ... auf Englisch

Modulimport

from pymongo import MongoClient, DESCENDING, ASCENDING

Unter der Annahme, dass die hier geschriebene Importanweisung bereits ausgeführt wurde, werde ich den folgenden Artikel schreiben.

Instanzerstellung

#Ich werde dies von nun an verwenden
>>> m_client = MongoClient()

Ich werde die Methoden auflisten, die verwendet werden können

Doba

>>> dir(m_client)
['HOST', 'PORT', '_BaseObject__codec_options', '_BaseObject__read_concern', '_BaseObject__read_preference', '_BaseObject__write_concern', '_MongoClient__all_credentials', '_MongoClient__cursor_manager', '_MongoClient__default_database_name', '_MongoClient__index_cache', '_MongoClient__index_cache_lock', '_MongoClient__kill_cursors_queue', '_MongoClient__lock', '_MongoClient__options', '_MongoClient__start_session', '__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__enter__', '__eq__', '__exit__', '__format__', '__ge__', '__getattr__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__next__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__', '_cache_credentials', '_cache_index', '_cached', '_close_cursor', '_close_cursor_now', '_constructor_args', '_database_default_options', '_encrypter', '_end_sessions', '_ensure_session', '_event_listeners', '_get_server_session', '_get_socket', '_get_topology', '_is_writable', '_kill_cursors', '_kill_cursors_executor', '_process_periodic_tasks', '_process_response', '_purge_credentials', '_purge_index', '_read_preference_for', '_repr_helper', '_reset_server', '_reset_server_and_request_check', '_retry_with_session', '_retryable_read', '_retryable_write', '_return_server_session', '_run_operation_with_response', '_select_server', '_send_cluster_time', '_server_property', '_slaveok_for_server', '_socket_for_reads', '_socket_for_writes', '_tmp_session', '_topology', '_topology_settings', '_write_concern_for', 'address', 'arbiters', 'close', 'close_cursor', 'codec_options', 'database_names', 'drop_database', 'event_listeners', 'fsync', 'get_database', 'get_default_database', 'is_locked', 'is_mongos', 'is_primary', 'kill_cursors', 'list_database_names', 'list_databases', 'local_threshold_ms', 'max_bson_size', 'max_idle_time_ms', 'max_message_size', 'max_pool_size', 'max_write_batch_size', 'min_pool_size', 'next', 'nodes', 'primary', 'read_concern', 'read_preference', 'retry_reads', 'retry_writes', 'secondaries', 'server_info', 'server_selection_timeout', 'set_cursor_manager', 'start_session', 'unlock', 'watch', 'write_concern']

1. Minimale Grundverarbeitung

DB-Namen auflisten

>>> m_client.list_database_names()
['admin', 'candles', 'config', 'local'] #DB das war in meinem mongodb

#Das Ergebnis ist in beiden Fällen das gleiche ~
>>> m_client.database_names()
['admin', 'candles', 'config', 'local']

DB erstellen

Was ** unnötig **! Auch wenn die angegebene Datenbank nicht vorhanden ist, wird die Datenbank zusammen erstellt, wenn Sie Daten eingeben! Es ist praktisch, aber ein bisschen beängstigend ...?

Sammlung erstellen

Dies ist auch ** unnötig **! In Mongodb gibt es einen Frame mit dem Namen Collection in der Datenbank, in den Datensätze eingefügt werden. Es wird jedoch automatisch eine Collection erstellt, die zum Zeitpunkt des Einfügens des Datensatzes nicht vorhanden ist.

  • Was in MongoDB eingefügt wird, ist kein Datensatz, sondern ursprünglich ** Dokument ** genannt. In diesem Artikel wird jedoch der Name eines Datensatzes verwendet, der häufig als Einheit zum Einfügen nacheinander verwendet wird.

Dies ist auch praktisch, aber ein wenig beängstigend. (Auch wenn die Sammlungsspezifikation falsch ist, darf kein Fehler auftreten.)

Datensatz einfügen

Instance.db name.collection name.insert_one ({'hoge': 'hoge'}) Es wird so geschrieben.


>>> m_client.db_name.collection_name.insert_one({'hoge': 'Hoge 1'})
<pymongo.results.InsertOneResult object at 0x7fb567329448>

#Es gibt auch eine Einfügemethode, aber ich werde wütend, wenn ich sie benutze
>>> m_client.db_name.collection_name.insert({'hoge': 'Hoge 2'})
__main__:1: DeprecationWarning: insert is deprecated. Use insert_one or insert_many instead.
ObjectId('5dec7ab6f8f8434dbcab979a')

Sie haben jetzt zwei {'hoge': 'hoge'} eingefügt.

Wählen *

>>> m_client.db_name.collection_name.find()
<pymongo.cursor.Cursor object at 0x7fb56730ddd8> #Bist du wieder...

#Sie können den Inhalt anzeigen, indem Sie ihn in eine Liste aufnehmen und anordnen.
>>> list(m_client.db_name.collection_name.find())
[
    {'_id': ObjectId('5dec7ab6f8f8434dbcab979a'), 'hoge': 'Hoge 1'},
    {'_id': ObjectId('5dec7ae3f8f8434dbcab979b'), 'hoge': 'Hoge 2'}
]

Es gibt zwei Hoge, die ich gerade eingesetzt habe.

Auswählen (nur eine Auswahl)

>>> m_client.db_name.collection_name.find_one()
{'_id': ObjectId('5dec7ab6f8f8434dbcab979a'), 'hoge': 'Hoge 1'}

Wählen Sie durch Angabe der Bedingungen (wählen Sie * wobei ~)

>>> list(m_client.db_name.collection_name.find({'hoge': 'Hoge 2'}))
[
    {'_id': ObjectId('5dec7ab6f8f8434dbcab979a'), 'hoge': 'Hoge 2'}
]
# 'hoge'Der Spaltenwert ist'Hoge 2'Wenn andere Daten vorhanden sind, werden alle erfasst


# find_Wenn einer, wählen Sie nur einen aus
>>> m_client.db_name.collection_name.find_one({'hoge': 'Hoge'})
{'_id': ObjectId('5dec7ae3f8f8434dbcab979b'), 'hoge': 'Hoge'}

Löschen

#Der erste von der Bedingung gefundene Datensatz wird gelöscht
>>> m_client.db_name.collection_name.delete_one({'hoge': 'Hoge 2'})
<pymongo.results.DeleteResult object at 0x7fb567344208>

2. Versuchen Sie es stärker

DB aufzählen?

#Ich kann den Inhalt damit nicht sehen....
>>> m_client.list_databases()
<pymongo.command_cursor.CommandCursor object at 0x7fb56730dcf8>

#Also zu arrangieren
>>> list(m_client.list_databases())
[
    {'name': 'admin', 'sizeOnDisk': 102400.0, 'empty': False}, 
    {'name': 'candles', 'sizeOnDisk': 1875968.0, 'empty': False},
    {'name': 'config', 'sizeOnDisk': 98304.0, 'empty': False},
    {'name': 'local', 'sizeOnDisk': 73728.0, 'empty': False}
]

Ich weiß nicht, was ich verwenden soll .... (´ ・ ω ・ `)

Einfügen durch Angabe von'_id '

mongodb weist jedem Datensatz automatisch eine eindeutige'_id 'zu, wenn Sie ihn einfügen.

Wenn Sie die'_id 'jedoch selbst angeben möchten, tun Sie dies.

>>> m_client.db_name.collection_name.insert({
    '_id': 'Ich würde',
    'hoge': 'Hoge 3'
})

#Dann wird es so
>>> list(m_client.your_db_name.your_collection_name.find())
[
    {'_id': ObjectId('5dec7ab6f8f8434dbcab979a'), 'hoge': 'Hoge 1'},
    {'_id': ObjectId('5dec7ae3f8f8434dbcab979b'), 'hoge': 'Hoge'},
    {'_id': 'Ich würde', 'hoge': 'Hoge 3'}
]

#Soll ich Datum und Uhrzeit eingeben? Ich denke
>>> import datetime
>>> m_client.db_name.collection_name.insert_one({'_id': datetime.datetime.now(), 'hoge': 'Hoge 4'})
>>> list(m_client.db_name.collection_name.find())
[
    {'_id': ObjectId('5dec7ab6f8f8434dbcab979a'), 'hoge': 'Hoge 1'},
    {'_id': ObjectId('5dec7ae3f8f8434dbcab979b'), 'hoge': 'Hoge'},
    {'_id': 'Ich würde', 'hoge': 'Hoge 3'},
    {'_id': datetime.datetime(2019, 12, 8, 14, 58, 31, 579000), 'hoge': 'Hoge 4'}
]

Mehrere Datensätze einfügen (ulk_insert)

Übergeben Sie einfach die Daten im Array-Format an die Methode insert_many

#Wenn ich es ausführe, sieht es so aus (diesmal habe ich es nicht ausgeführt)
m_client.db_name.collection_name.insert_many([
    {'hoge': 'Hexagon'},
    {'hoge': 'Hexagon'}
])

Sammlung / DB-Löschung

#Sammlung gelöscht
>>> m_client.db_name.collection_name.drop()
>>> list(m_client.db_name.collection_name.find())
[]

#↑ Keine Treffer mehr

#Wenn es keine Sammlung gibt, ist die DB automatisch weg!
>>> list(m_client.list_database_names())
['admin', 'candles', 'config', 'local']

Auswahlergebnisse sortieren (order_by)

#Fügen Sie vorerst viele Datensätze ein(5~6 Mal ausführen)
>>> m_client.db_name.collection_name.insert_one({'_id': datetime.datetime.now(), 'hoge': 'Hoge'})

#Absteigende Sorte(Neues Datum und neue Uhrzeit stehen oben)
>>> list(m_client.db_name.collection_name.find().sort('_id', DESCENDING))
[
    {'_id': datetime.datetime(2019, 12, 8, 15, 10, 56, 625000), 'hoge': 'Hoge'},
    {'_id': datetime.datetime(2019, 12, 8, 15, 10, 55, 984000), 'hoge': 'Hoge'},
    {'_id': datetime.datetime(2019, 12, 8, 15, 10, 55, 528000), 'hoge': 'Hoge'},
    {'_id': datetime.datetime(2019, 12, 8, 15, 10, 55, 121000), 'hoge': 'Hoge'},
    {'_id': datetime.datetime(2019, 12, 8, 15, 10, 54, 696000), 'hoge': 'Hoge'},
    {'_id': datetime.datetime(2019, 12, 8, 15, 9, 36, 233000), 'hoge': 'Hoge'}
]

#Aufsteigende Sorte(Das alte Datum und die alte Uhrzeit stehen oben)
>>> list(m_client.db_name.collection_name.find().sort('_id', ASCENDING))
[
    {'_id': datetime.datetime(2019, 12, 8, 15, 9, 36, 233000), 'hoge': 'Hoge'},
    {'_id': datetime.datetime(2019, 12, 8, 15, 10, 54, 696000), 'hoge': 'Hoge'},
    {'_id': datetime.datetime(2019, 12, 8, 15, 10, 55, 121000), 'hoge': 'Hoge'},
    {'_id': datetime.datetime(2019, 12, 8, 15, 10, 55, 528000), 'hoge': 'Hoge'},
    {'_id': datetime.datetime(2019, 12, 8, 15, 10, 55, 984000), 'hoge': 'Hoge'},
    {'_id': datetime.datetime(2019, 12, 8, 15, 10, 56, 625000), 'hoge': 'Hoge'}
]

#Eigentlich kann ich noch gehen(Ich mag diesen)
>>> list(m_client.db_name.collection_name.find(sort=[('_id', DESCENDING)]))

Wählen Sie diese Option aus, indem Sie den Bereich für eine bestimmte Spalte angeben

Dies ist die Kennung, mit der der Bereich angegeben wird

das ist alles Super Weniger als Weniger als
Kennung $gte $gt $lte $lt
#Über einem bestimmten Wert (nach diesem Datum und dieser Uhrzeit)
>>> list(m_client.db_name.collection_name.find(filter={
    '_id':{'$gte': datetime.datetime(2019, 12, 8, 15, 10, 55, 528000)}
}))
[
    {'_id': datetime.datetime(2019, 12, 8, 15, 10, 55, 528000), 'hoge': 'Hoge'},
    {'_id': datetime.datetime(2019, 12, 8, 15, 10, 55, 984000), 'hoge': 'Hoge'},
    {'_id': datetime.datetime(2019, 12, 8, 15, 10, 56, 625000), 'hoge': 'Hoge'}
]

#Ein Wert, der einen bestimmten Wert überschreitet (ohne Datum und Uhrzeit nach diesem Datum und dieser Uhrzeit)
>>> list(m_client.db_name.collection_name.find(filter={
    '_id':{'$gt': datetime.datetime(2019, 12, 8, 15, 10, 55, 528000)}
}))
[
    {'_id': datetime.datetime(2019, 12, 8, 15, 10, 55, 984000), 'hoge': 'Hoge'},
    {'_id': datetime.datetime(2019, 12, 8, 15, 10, 56, 625000), 'hoge': 'Hoge 4'}
]

#Von einem bestimmten Wert zu einem bestimmten Wert
>>> list(m_client.db_name.collection_name.find(filter={
    '_id':{
        '$gte': datetime.datetime(2019, 12, 8, 15, 10, 55, 121000),
        '$lte':  datetime.datetime(2019, 12, 8, 15, 10, 55, 984000)
    }
}))
[
    {'_id': datetime.datetime(2019, 12, 8, 15, 10, 55, 121000), 'hoge': 'Hoge'},
    {'_id': datetime.datetime(2019, 12, 8, 15, 10, 55, 528000), 'hoge': 'Hoge'},
    {'_id': datetime.datetime(2019, 12, 8, 15, 10, 55, 984000), 'hoge': 'Hoge'}
]

$ gt und $ lt haben die entgegengesetzte Bedeutung

Wählen Sie außerdem eine Kombination von Bedingungsspezifikationen aus

Das ist detailliert! Verschiedene Suchbedingungen mit Pymongo (UND / ODER / Teilübereinstimmung / Bereichssuche)

(Daher weggelassen ...)

Recommended Posts

[Python3 / MongoDB] Fassen Sie Pymongo-Verarbeitungsaufrufe leicht zusammen
Pandas Grundlagen für Anfänger ⑧ Ziffernverarbeitung
Grundlagen zum Berühren von MongoDB mit MongoEngine
Grundlagen der binärisierten Bildverarbeitung durch Python
[Python3 / MongoDB] Fassen Sie Pymongo-Verarbeitungsaufrufe leicht zusammen
Python-Bildverarbeitung
Python-Dateiverarbeitung
Fassen Sie den Python-Import zusammen
Mongodb Zugang mit Pymongo
Python verteilte Verarbeitung Spartan
Dateiverarbeitung in Python
Python: Verarbeitung natürlicher Sprache
Kommunikationsverarbeitung durch Python
Multithread-Verarbeitung in Python
Erste Python-Bildverarbeitung
Verarbeitung in Python beenden
Bildverarbeitung mit Python
Abbildung zur Verarbeitung von Python-Zeichenfolgen
Verschiedene Verarbeitung von Python