Heim  >  Artikel  >  Datenbank  >  MongoDB Advanced Kapitel Dynamisches Felddesign

MongoDB Advanced Kapitel Dynamisches Felddesign

零下一度
零下一度Original
2018-05-17 14:00:502317Durchsuche

Dieser Artikel stellt Ihnen hauptsächlich die relevanten Informationen zum erweiterten dynamischen Felddesign von MongoDB vor. Die Einführung im Artikel ist sehr detailliert und bietet einen gewissen Referenz- und Lernwert für alle Freunde, die sie benötigen Lasst uns gemeinsam lernen.

Dieser Artikel stellt hauptsächlich relevante Informationen zum dynamischen Felddesign von MongoDB vor. Er wird für alle zum Nachschlagen und Lernen freigegeben. Freunde, die sie benötigen, können einen Blick auf die ausführliche Einführung werfen.

Geeignet für Leser

  • MongoDB-Entwickler

Grundlegende Anforderungen

Produkt: „Wir möchten bestehenden Formularen eine tolle Funktion hinzufügen, die es Benutzern ermöglicht, die gewünschten Felder hinzuzufügen“

Technisches Ziel Version 1

Speichern dynamischer Formulardaten (neue Felder müssen das Schema nicht ändern)

Lass uns reden Lassen Sie uns zuerst über die von MongoDB unterstützten Indizes sprechen 🎜>

Array

Dokumentindex
// 假如我们的文档长这样
{
 "name": "MongoDB",
 "age": 5
}

// 对age字段建立索引
{
 "age": 1
}

Es scheint, dass keines der oben genannten Elemente die Funktion des dynamischen Hinzufügens von Feldern erfüllen kann

// 假如我们的文档长成了Object
{
 "person": {
  "age": 2,
  "name": "MongoDB"
 }
}

//对person.age字段建立索引
{
 "person.age": 1
}

Programmierer A und Programmierer S führten das folgende Gespräch:Programmierer A: „ Dann müssen wir eine weitere Sammlung hinzufügen, um dynamische Inhalte zu speichern Zukünftige Produkte sagen, dass sie Sortier- und Filterfunktionen hinzufügen werden, wir werden verwirrt sein☹️, pfui ~ Guten Morgen. Wenn ich das weiß, besteht keine Notwendigkeit für MongoDB“ Überprüfen Sie die Anforderungen erneut

// 假如我们的文档长成了数组
{
 "persons": [
  { "name": "MongoDB", age: 5},
  { "name": "MySQL", age: 20}
 ]
}
//对persons.age字段建立索引
{
 "persons.age": 1
}


Speichern dynamischer Formulardaten

  • Unterstützung für Filterung und Sortierung erforderlich


  • Technische Zielversion2

Felder hinzufügen Gleichzeitig ist auch eine Indizierung möglich

    Lösung
  • Verwenden Sie Arrays, um dynamische Felder zu speichern

Beschreibungssammlung hinzufügen, um Benutzerformularkonfiguration aufzuzeichnen

Die Speicherstruktur ist wie folgt:


Achtung!!! Wenn der Benutzer n Felder hinzufügt, wird die Beschreibungssammlung hinzugefügt n Dokumente gleichzeitig

  • Wie man abfragt, sortiert und filtert

  • Wie aus dem obigen Beispiel ersichtlich ist, auch wenn der Benutzer das Feld nicht ausfüllt Wert müssen wir noch einen Nullwert dafür speichern, um sicherzustellen, dass das n-te Feld unter der Form aller unserer
  • Document

    das gleiche
    Control

    ist, damit wir das filtern und sortieren können Felder und Index

//描述collection 
{
 "_id":"描述id",
 "type":"类型",
 "text": "订单名称",
 "default": "Default Name",
}

// 原本的表单增加字段form用来存储动态数据
{
 "_id": "",
 "name": "一个好名字",
 "form":[
 { "_id":"描述_id", "value": 10},
 { "_id":"描述_id", "value": "我的好伙伴"},
 ]
}
Drilldown fortsetzen

Produkt: „Wir müssen Benutzern das Hinzufügen von Dropdown-Boxen und Multi- Auswahlfelder erfordern auch Filtern und Sortieren“

Programmierer: „Fxxx“

// 比如用户增加了2个字段
// 现在要对字段1进行排序
db.items.find().sort({"form.0.value":1})
// 对字段2进行筛选
db.items.find({"form.1.value":"我的好伙伴"})
Wie sollen solche Daten also gespeichert werden?

Die Lösung lautet wie folgt:

Unser Wert wird im Binärformat als 1,2,4,8 gespeichert...Zum Beispiel

Der Benutzer wählt das erste Element des Optionsfelds aus, dann wird 1 gespeichert, das zweite Element wird mit 2 gespeichert und das dritte Element wird mit 4 gespeichert

Der Benutzer wählt mehrere Optionen aus. Wählen Sie das erste Element + das dritte Element aus: Speichern Sie dann 5, (1+4)

MongoDB stellt uns eine leistungsstarke Aggregate-Funktion zur Verfügung, die die Funktion „Bitwise Query Operators“ enthält, einschließlich $bitsAllSet, $bitsAnySet , $bitsAllClear, $bitsAnyClear


Das Obige vervollständigt die verschiedenen Anforderungen für die Verwendung des dynamischen Felddesigns von MongoDB

Das obige ist der detaillierte Inhalt vonMongoDB Advanced Kapitel Dynamisches Felddesign. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn