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 dynamiquesAjouter une collection de descriptions pour enregistrer la configuration du formulaire utilisateur
Attention !!!
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":"我的好伙伴"})
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"
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
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!