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
https://api.mongodb.com/python/current/tutorial.html Auch wenn Sie sich meinen Artikel nicht ansehen, ist dies ... auf Englisch
from pymongo import MongoClient, DESCENDING, ASCENDING
Unter der Annahme, dass die hier geschriebene Importanweisung bereits ausgeführt wurde, werde ich den folgenden Artikel schreiben.
#Ich werde dies von nun an verwenden
>>> m_client = MongoClient()
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']
>>> 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']
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 ...?
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.)
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.
>>> 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.
>>> m_client.db_name.collection_name.find_one()
{'_id': ObjectId('5dec7ab6f8f8434dbcab979a'), 'hoge': 'Hoge 1'}
>>> 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'}
#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>
#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 .... (´ ・ ω ・ `)
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'}
]
Ü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 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']
#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)]))
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
Das ist detailliert! Verschiedene Suchbedingungen mit Pymongo (UND / ODER / Teilübereinstimmung / Bereichssuche)
(Daher weggelassen ...)
Recommended Posts