Maison  >  Article  >  base de données  >  Conception de champs dynamiques du chapitre avancé MongoDB

Conception de champs dynamiques du chapitre avancé MongoDB

零下一度
零下一度original
2018-05-17 14:00:502370parcourir

Cet article vous présente principalement les informations pertinentes sur la conception avancée de champs dynamiques MongoDB. L'introduction dans l'article est très détaillée et a une certaine valeur de référence et d'apprentissage pour tous les amis qui en ont besoin peuvent suivre ci-dessous. Apprenons ensemble.

Cet article présente principalement des informations pertinentes sur la conception de champs dynamiques MongoDB. Il est partagé pour référence et étude par tous. Les amis qui en ont besoin peuvent consulter l'introduction détaillée.

Convient aux lecteurs

  • Développeurs MongoDB

Exigences de base

Produit : "Nous souhaitons ajouter une fonctionnalité intéressante aux formulaires existants qui permet aux utilisateurs d'ajouter les champs qu'ils souhaitent"

Objectif technique version 1

Stockage des données de formulaire dynamique (les nouveaux champs n'ont pas besoin de modifier le schéma)

Parlons Parlons d'abord des index pris en charge par MongoDB 🎜>

Array

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

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

. Il semble qu'aucun des éléments ci-dessus ne puisse remplir la fonction d'ajout dynamique de champs

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

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

Le programmeur A et le programmeur S ont eu la conversation suivante :Le programmeur A : " Ensuite, nous devons ajouter une autre collection pour stocker le contenu dynamique"

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


Programmeur S : "Mais la prise en charge de MongoDB pour les requêtes associées est très faible, et elle ne peut même pas être liée au tri If. les futurs produits disent qu'ils ajouteront des fonctions de tri et de filtrage, nous serons confus☹️, pouah~ Bonjour Sachant cela, il n'y a pas besoin de MongoDB"

  • Réexaminer les exigences


  • Stockage des données de formulaire dynamique

Besoin de prendre en charge le filtrage et le tri

  • Objectif technique version2

  • Ajouter des champs Par la même occasion, il est également possible d'indexer

Solution

Utiliser des tableaux pour stocker des champs dynamiques


Ajouter une collection de descriptions pour enregistrer la configuration du formulaire utilisateur

  • La structure de stockage est la suivante :

  • Attention !!!

    Lorsque l'utilisateur ajoute n champs, la collection de description s'ajoute n documents en même temps

Comment interroger, trier et filtrer

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

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

Comme le montre l'exemple ci-dessus, même si l'utilisateur ne remplit pas le champ valeur, nous devons toujours stocker une valeur nulle pour nous assurer que le nième champ sous la forme de tous nos Document est le même Contrôle , afin que nous puissions filtrer et trier les champs et index

// 比如用户增加了2个字段
// 现在要对字段1进行排序
db.items.find().sort({"form.0.value":1})
// 对字段2进行筛选
db.items.find({"form.1.value":"我的好伙伴"})
Continuer l'exploration

Produit : "Nous devons permettre aux utilisateurs d'ajouter des listes déroulantes et des les cases de sélection nécessitent également un filtrage et un tri"

Programmeur : "Fxxx"

Alors, comment ces données doivent-elles être stockées ?

La solution est la suivante :


Notre valeur est stockée au format binaire sous la forme 1,2,4,8...


Par exemple

L'utilisateur sélectionne le premier élément du bouton radio, puis 1 est stocké, le deuxième élément est stocké avec 2 et le troisième élément est stocké avec 4

L'utilisateur sélectionne plusieurs options Sélectionnez le premier élément + le troisième élément : puis enregistrez 5, (1+4)


MongoDB nous fournit une puissante fonction Aggregate, qui inclut la fonction Bitwise Query Operators, notamment $bitsAllSet, $bitsAnySet , $bitsAllClear, $bitsAnyClear


Ce qui précède complète les différentes exigences pour l'utilisation de la conception de champs dynamiques MongoDB

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn