mongoengine教程(2)文档模式
在MongoDB中一个文档(document)与关系型数据库中的一行(row)相似;文档保存在集合(collection)中,行保存在表(table)中。 定义文档的模式 与django类似,要定义一个文档模式只需要创建一个类继承自 Document,并添加一些 Field 对象。 from mongoengine impo
在MongoDB中一个文档(document)与关系型数据库中的一行(row)相似;文档保存在集合(collection)中,行保存在表(table)中。
定义文档的模式
与django类似,要定义一个文档模式只需要创建一个类继承自 Document,并添加一些 Field 对象。
from mongoengine import * import datetime class Page(Document): title = StringField(max_length=200, required=True) date_modified = DateTimeField(default=datetime.datetime.now)
如上定义了一个文档模式具有 title和date_modified 两个字段。
同时MongoDB本身就是无模式的,因此我们还可以创建动态的文档模式。它可以在添加数据时为不同的数据设置不同的字段。
class Page(DynamicDocument): title = StringField(max_length=200, required=True)
添加数据:
page = Page(title='Using MongoEngine') page.tags = ['mongodb', 'mongoengine'] page.save()
文档字段
文档字段(Field)不是必需的,但是使用它来进行数据验证、设置默认值等操作会比较方便。
MongoEngine提供了如下这些类型的Field:
- BinaryField
- BooleanField
- ComplexDateTimeField
- DateTimeField
- DecimalField
- DictField
- DynamicField
- EmailField
- EmbeddedDocumentField
- FileField
- FloatField
- GenericEmbeddedDocumentField
- GenericReferenceField
- GeoPointField
- ImageField
- IntField
- ListField
- MapField
- ObjectIdField
- ReferenceField
- SequenceField
- SortedListField
- StringField
- URLField
- UUIDField
文档之间引用关系
在关系型数据库中多个表可以使用外键进行关联。然而MongoDB是无模式的,因此想要达到这样的效果就这能在应用程序中自己手动的进行关联了。
不过还好,使用MongoEngine的ReferenceField可以很方便的实现。
class User(Document): name = StringField() class Page(Document): content = StringField() author = ReferenceField(User) john = User(name="John Smith") john.save() post = Page(content="Test Page") post.author = john post.save()
一对多的关系
对于一对多的关系可以使用ListField来保存一个ReferenceField列表。在进行查询操作是需要传入一个实例对象。
class User(Document): name = StringField() class Page(Document): content = StringField() authors = ListField(ReferenceField(User)) bob = User(name="Bob Jones").save() john = User(name="John Smith").save() Page(content="Test Page", authors=[bob, john]).save() Page(content="Another Page", authors=[john]).save() # Find all pages Bob authored Page.objects(authors__in=[bob])
引用对象的删除操作
MongoDB默认不会检查数据的完整性,因此在删除一个对象是就需要自己手动的处理引用了该对象的其他对象。
同样的MongoEngine也提供了一样的功能。ReferenceField有一个 reverse_delete_rule 参数可以进行设置。它的取值如下:
- mongoengine.DO_NOTHING:默认就是这个值,它不会进行任何操作。
- mongoengine.DENY:如果该对象还被其他对象引用,则拒绝删除。
- mongoengine.NULLIFY:将其他对象对该对象的引用字段设为null。
- mongoengine.CASCADE:将引用了该对象的其他对象也删除掉。
- mongoengine.PULL:移除对该对象的引用。
索引
与django的Model相似,MongoEngine的Document也可以在meta属性中设置索引。
class Page(Document): title = StringField() rating = StringField() meta = { 'indexes': ['title', ('title', '-rating')] }
meta中的indexes可以是一个列表,也可以是一个字典。
原文地址:mongoengine教程(2)——文档模式, 感谢原作者分享。

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Node.js ist eine serverseitige JavaScript-Laufzeitumgebung, während Vue.js ein clientseitiges JavaScript-Framework zum Erstellen interaktiver Benutzeroberflächen ist. Node.js wird für die serverseitige Entwicklung verwendet, beispielsweise für die Entwicklung von Back-End-Service-APIs und die Datenverarbeitung, während Vue.js für die clientseitige Entwicklung verwendet wird, beispielsweise für Single-Page-Anwendungen und reaktionsfähige Benutzeroberflächen.

Selbst das Beantworten von Anrufen im Modus „Bitte nicht stören“ kann ein sehr lästiges Erlebnis sein. Wie der Name schon sagt, deaktiviert der Modus „Bitte nicht stören“ alle Benachrichtigungen über eingehende Anrufe und Warnungen von E-Mails, Nachrichten usw. Sie können diesen Lösungssätzen folgen, um das Problem zu beheben. Fix 1 – Fokusmodus aktivieren Aktivieren Sie den Fokusmodus auf Ihrem Telefon. Schritt 1 – Wischen Sie von oben nach unten, um auf das Kontrollzentrum zuzugreifen. Schritt 2 – Aktivieren Sie als Nächstes den „Fokusmodus“ auf Ihrem Telefon. Der Fokusmodus aktiviert den „Bitte nicht stören“-Modus auf Ihrem Telefon. Es werden keine Benachrichtigungen über eingehende Anrufe auf Ihrem Telefon angezeigt. Fix 2 – Fokusmodus-Einstellungen ändern Wenn es Probleme mit den Fokusmoduseinstellungen gibt, sollten Sie diese beheben. Schritt 1 – Öffnen Sie Ihr iPhone-Einstellungsfenster. Schritt 2 – Als nächstes schalten Sie die Fokusmodus-Einstellungen ein

Nach dem Regen im Sommer können Sie oft ein wunderschönes und magisches besonderes Wetterbild sehen – den Regenbogen. Dies ist auch eine seltene Szene, die man in der Fotografie antreffen kann, und sie ist sehr fotogen. Für das Erscheinen eines Regenbogens gibt es mehrere Bedingungen: Erstens sind genügend Wassertröpfchen in der Luft und zweitens scheint die Sonne in einem niedrigeren Winkel. Daher ist es am einfachsten, einen Regenbogen am Nachmittag zu sehen, nachdem der Regen nachgelassen hat. Allerdings wird die Bildung eines Regenbogens stark von Wetter, Licht und anderen Bedingungen beeinflusst, sodass sie im Allgemeinen nur von kurzer Dauer ist und die beste Betrachtungs- und Aufnahmezeit sogar noch kürzer ist. Wenn Sie also auf einen Regenbogen stoßen, wie können Sie ihn dann richtig aufzeichnen und qualitativ hochwertige Fotos machen? 1. Suchen Sie nach Regenbögen. Zusätzlich zu den oben genannten Bedingungen erscheinen Regenbögen normalerweise in Richtung des Sonnenlichts, das heißt, wenn die Sonne von Westen nach Osten scheint, ist es wahrscheinlicher, dass Regenbögen im Osten erscheinen.

Zu den Lösungen zur Behebung von Navicat-Ablaufproblemen gehören: Erneuern der Lizenz; Deaktivieren der automatischen Updates; Wenden Sie sich an den Navicat-Kundendienst.

Die Ausweitung des virtuellen Marktes ist untrennbar mit der Zirkulation virtueller Währungen verbunden, und natürlich ist sie auch untrennbar mit der Frage der virtuellen Währungstransfers verbunden. Ein häufiger Übertragungsfehler ist der Adresskopiefehler und ein weiterer Fehler ist der Kettenauswahlfehler. Der Transfer virtueller Währungen in die falsche Kette ist immer noch ein heikles Problem, aber aufgrund des ungeschickten Transfervorgangs übertragen Anfänger oft die falsche Kette. Wie kann man also die falsche Kette virtueller Währungen wiederherstellen? Der falsche Link kann über eine Drittanbieterplattform abgerufen werden, ist jedoch möglicherweise nicht erfolgreich. Als Nächstes informiert Sie der Redakteur ausführlich darüber, wie Sie Ihre virtuellen Vermögenswerte besser verwalten können. Wie kann ich die falsche Kette virtueller Währungen abrufen? Der Prozess des Abrufens virtueller Währungen, die an die falsche Kette übertragen wurden, kann kompliziert und herausfordernd sein, aber durch die Bestätigung der Übertragungsdetails, die Kontaktaufnahme mit der Börse oder dem Wallet-Anbieter, den Import des privaten Schlüssels in eine kompatible Wallet und die Verwendung des Cross-Chain-Bridge-Tools

Go-Funktionsdokumentation mit der IDE anzeigen: Bewegen Sie den Cursor über den Funktionsnamen. Drücken Sie den Hotkey (GoLand: Strg+Q; VSCode: Nach der Installation von GoExtensionPack F1 und wählen Sie „Go:ShowDocumentation“).

Für Front-End-Entwickler hängt die Schwierigkeit, Node.js zu erlernen, von ihrer JavaScript-Grundlage, ihrer serverseitigen Programmiererfahrung, ihrer Vertrautheit mit der Befehlszeile und ihrem Lernstil ab. Die Lernkurve umfasst Module für Einsteiger und Fortgeschrittene, die sich auf grundlegende Konzepte, serverseitige Architektur, Datenbankintegration und asynchrone Programmierung konzentrieren. Insgesamt ist das Erlernen von Node.js für Entwickler, die über solide Kenntnisse in JavaScript verfügen und bereit sind, Zeit und Mühe zu investieren, nicht schwierig, aber für diejenigen, denen es an einschlägiger Erfahrung mangelt, müssen möglicherweise bestimmte Herausforderungen bewältigt werden.

Node.js kann sowohl für das Front-End (Verwaltung der Benutzeroberfläche und Interaktionen) als auch für das Back-End (Verwaltung von Logik und Daten) verwendet werden. Das Front-End verwendet HTML-, CSS- und JavaScript-Frameworks, während das Front-End das Node.js-Framework, die Datenbank und die Cloud-Dienste verwendet. Der Fokus ist unterschiedlich (das Front-End konzentriert sich auf das Erlebnis, das Back-End konzentriert sich auf die Funktionalität), die Betriebsumgebung ist unterschiedlich (das Front-End befindet sich im Browser, das Back-End befindet sich auf dem Server) und die Tools sind unterschiedlich (das Front-End und das Back-End verwenden unterschiedliche Code-Kompilierungs- und Verpackungs-Tool-Sets), obwohl beide JavaScript verwenden, aber mit Zugriff auf unterschiedliche APIs und Bibliotheken.
