Eine Problemumgehung finden Sie oben in Tabelle 6.1. Standardfilter-Aliase und -Bestellung. Führen Sie die gewünschte Filterung durch, bevor das Ziel der Anforderung festgelegt wird. Verwenden wir MongoDBs ODM mit Java, Spring-Security und Spring Python. Vorheriges Buch Dieser Artikel ist eine Fortsetzung des Artikels Erste Schritte mit MongoDB mit Python. Es ist so strukturiert, dass Sie den Inhalt verstehen können, ohne den vorherigen Artikel zu lesen. Wenn Sie an MongoDB interessiert sind, würden wir uns freuen, wenn Sie bis zum Ende bei uns bleiben könnten.
MongoDB In diesem Artikel erstellen wir die Umgebung mit Docker. Wenn Sie MongoDB direkt lokal installieren möchten, lesen Sie bitte den vorherigen Artikel. : point_up_tone1:
docker-compose.yml
version: '3.1'
services:
mongo:
image: mongo
restart: always
ports:
- 27017:27017
environment:
MONGO_INITDB_ROOT_USERNAME: root
MONGO_INITDB_ROOT_PASSWORD: example
mongo-express:
image: mongo-express
restart: always
ports:
- 8081:8081
environment:
ME_CONFIG_MONGODB_ADMINUSERNAME: root
ME_CONFIG_MONGODB_ADMINPASSWORD: example
Starten Sie den Container.
docker-compose up -d mongo mongo-express
Wenn Sie auf Mongo Express zugreifen und es anzeigen können, ist die Erstellung der MongoDB-Umgebung abgeschlossen.
Python
Die Python-Seite verwendet eine Bibliothek namens "Mongoengine".
pip install mongoengine
Versuchen Sie eine Verbindung herzustellen. Versuchen Sie, eine Verbindung zur standardmäßig enthaltenen lokalen Datenbank herzustellen.
test.py
from mongoengine import connect
connect(db='local',
username="root",
password="example",
host='192.168.99.100',
port=27017,
authentication_mechanism='SCRAM-SHA-1',
authentication_source='admin'
)
Führen Sie es aus, und wenn keine Fehler vorliegen, ist es erfolgreich. Weitere Verbindungsmethoden finden Sie hier: point_right_tone1: Erste Schritte mit MongoDB in Python
Was ist ODM, buchstäblich Objektdokumentzuordnung. Ordnen Sie Objekte einer Dokumentendatenbank wie MongoDB zu. Der Vorteil der Verwendung besteht darin, dass Sie die Struktur der Daten binden können.
test.py
from mongoengine import connect, Document, EmbeddedDocument, \
StringField, IntField, DateTimeField, ListField, EmbeddedDocumentField
from datetime import datetime
connect(db='company',
username="root",
password="example",
host='192.168.99.100',
port=27017,
authentication_mechanism='SCRAM-SHA-1',
authentication_source='admin'
)
class Employee(EmbeddedDocument):
"""
Mitarbeiterdetails
"""
name = StringField(required=True)
age = IntField(required=False)
SCALE_CHOICES = (
("venture", "Wagen"),
("major", "Haupt")
)
class Company(Document):
"""
Unternehmensmodell
"""
name = StringField(required=True, max_length=32)
scale = StringField(required=True, choices=SCALE_CHOICES)
created_at = DateTimeField(default=datetime.now())
members = ListField(EmbeddedDocumentField(Employee))
Wenn Sie jemals ein Modell mit "Django" oder "sqlalchemy" definiert haben, ist dies eine vertraute Konfiguration.
Lassen Sie uns die Daten mit dem tatsächlich definierten Modell in MongoDB einfügen.
Fügen Sie den folgenden Code zu test.py
hinzu und führen Sie ihn aus.
: point_up_tone1: Sie müssen keine Testdatenbank im Voraus erstellen.
test.py
class TestMongoEngine:
def add_one(self):
c_obj = Company(
name="Berühmtes Unternehmen",
scale="venture",
)
c_obj.save()
return c_obj
if __name__ == "__main__":
t = TestMongoEngine()
t.add_one()
In Mongo Express können Sie sehen, dass die Daten eingegeben wurden.
EmbeddedDocumentField
ist nützlich, wenn Sie mehr Struktur innerhalb des Modells definieren möchten, also werde ich es verwenden.
Ändern Sie den zu test.py
hinzugefügten Code wie folgt und führen Sie ihn erneut aus.
test.py
class TestMongoEngine:
def add_one(self):
member1 = Employee(
name="memberA",
age=40,
)
member2 = Employee(
name="memberB",
age=35,
)
c_obj = Company(
name="Berühmtes Unternehmen A.",
scale="venture",
members=[member1, member2]
)
c_obj.save()
return c_obj
if __name__ == "__main__":
t = TestMongoEngine()
t.add_one()
Überprüfen Sie das Ergebnis von Mongo Express.
C (Erstellen) Das Beispiel zum Hinzufügen eines neuen wurde im ersten Beispiel vorgestellt. Wir beginnen also mit dem Lesen der Daten.
Lesen Sie eine Daten aus der neu hinzugefügten Datenbank.
test.py
...
class TestMongoEngine:
def get_one(self):
return Company.objects.first()
if __name__ == "__main__":
t = TestMongoEngine()
rest = t.get_one()
print(rest.id)
print(rest.name)
Ergebnis
5e7ed47419d1a75baa2bc3f3
Berühmtes Unternehmen
test.py
...
class TestMongoEngine:
def get_more(self):
return Company.objects.all()
if __name__ == "__main__":
t = TestMongoEngine()
rest = t.get_more()
print(rest)
Ergebnis
[<Company: Company object>, <Company: Company object>, <Company: Company object>]
test.py
...
class TestMongoEngine:
def get_from_oid(self, oid):
return Company.objects.filter(pk=oid).first()
if __name__ == "__main__":
t = TestMongoEngine()
rest = t.get_from_oid("5e7ed47419d1a75baa2bc3f3")
print(rest.id)
print(rest.name)
Ergebnis
5e7ed47419d1a75baa2bc3f3
Berühmtes Unternehmen
Wenn Sie die Reihenfolge beim Lesen von Daten ändern möchten, fügen Sie dem Unternehmensmodell "meta" hinzu.
test.py
class Company(Document):
"""
Unternehmensmodell
"""
name = StringField(required=True, max_length=32)
scale = StringField(required=True, choices=SCALE_CHOICES)
created_at = DateTimeField(default=datetime.now())
members = ListField(EmbeddedDocumentField(Employee))
meta = {
'ordering': ['-created_at'] #Meta hinzufügen
}
test.py
...
class TestMongoEngine:
def update(self):
rest = Company.objects.filter(name="Berühmtes Unternehmen").update_one(name="Gewöhnliches Unterfangen")
return rest
if __name__ == "__main__":
t = TestMongoEngine()
rests = t.update()
Nach der Ausführung können Sie sehen, dass die Daten von Mongo Express geändert wurden.
Es gibt zwei Datensätze in MongoDB, bei denen "Name" das berühmte Unternehmen A ist. Wir werden sie reparieren.
test.py
class TestMongoEngine:
def update(self):
rest = Company.objects.filter(name="Berühmtes Unternehmen A.").update(name="Berühmtes Unternehmen B.")
return rest
if __name__ == "__main__":
t = TestMongoEngine()
rests = t.update()
print(rests)
Ausführungsergebnis
2
Sie können auch bestätigen, dass die Daten von Mongo Express korrigiert wurden.
test.py
class TestMongoEngine:
def delete(self):
rest = Company.objects.filter(name="Gewöhnliches Unterfangen").first().delete()
return rest
if __name__ == "__main__":
t = TestMongoEngine()
rests = t.delete()
print(rests)
Nach der Ausführung
Löschen Sie die beiden Daten, deren "Name" das berühmte Unternehmen B ist.
test.py
...
class TestMongoEngine:
def delete(self):
rest = Company.objects.filter(name="Berühmtes Unternehmen B.").delete()
return rest
if __name__ == "__main__":
t = TestMongoEngine()
rests = t.delete()
print(rests)
Ausführungsergebnis
2
Als ich in Mongo Express nachgesehen habe, wurden alle Daten in CompanyDB gelöscht.
MongoEngine-Dokumentation Das nächste Mal möchte ich einen Artikel über das Erstellen eines Webdienstes mit Flask und MongoDB schreiben.
Recommended Posts