NodeJSでは複雑なデータ構造を管理します.

6253 ワード

新しいプロジェクトを始める時、データをどのように正しく整理するかは、まず解決すべき問題の一つです.ユーザのデータを記憶する必要があると仮定する.Mongoを使ってデータをセットに保存します.二つのオプションがあります.例えば、私たちは各ユーザの以下のデータを保存する必要があると仮定する.
ユーザ情報:
  • ユーザID
  • 名前は
  • です.
  • 名字は
  • です.
  • 現在のアドレス
  • メールアドレス
  • 家庭電話
  • 勤務電話
  • 携帯電話
  • 電話番号は検証されましたか?
    このデータを処理する方法の一つは、リスト内の各項目に対して個別のアーキテクチャを作成することである.その後、他のモードのデータを参照するためにモード参照を行うことができます.このように見えます.
    const mongoose = require('mongoose');
    let Schema = mongoose.Schema;
    const userIDSchema = new Schema({
    UserID: {
        type: mongoose.Schema.Types.Mixed,
      },
      })
    const UserID = mongoose.model('UserID', userIDSchema);
    module.exports = UserID;
    その後、ユーザー名モードでは、以下の操作を行います.
    const mongoose = require('mongoose');
    let Schema = mongoose.Schema;
    const FirstNameSchema = new Schema({
    UserID: {
        type: mongoose.Schema.Types.Mixed,
        ref: 'UserId', 
    },
    First_Name: {
        type: String,
    },
      })
    const FirstName = mongoose.model('Firstname', FirstNameSchema);
    module.exports = FirstName;
    その後、リスト内の後続項目ごとに同様の動作を行います.このように、各モードは独立していますが、他のデータにアクセスすることができます.しかし、多くの異なるモデルと路線を作成すると、これは厄介になります.バックエンドでデータを整理する方法を決める時、これは主に考慮される要素の一つです.データの成長をどのように望んでいますか?そして、現在のデータ組織は将来のデータの拡張と操作を簡単にできますか?ユーザーデータに関しては、現在のモデルは最適モデルではないかもしれません.また、モード間でデータを参照するのではなく、モデル内のオブジェクトと配列に必要なデータを入れ替えることができます.このように私達のデータを再構築しましょう.
    const User = mongoose.model('Story', userSchema);
    module.exports = User;
    const mongoose = require('mongoose');
    let Schema = mongoose.Schema;
    const userSchema = new Schema({
    UserID: {
        type: mongoose.Schema.Types.Mixed,
      },
      User_Info: {
        First_Name: {
          type: String,
        },
        Last_Name: {
          type: String,
        },
        Current_Address: {
          type: String,
        },
        Email_Address: {
          type: String,
        },
      },
          Phone_Numbers: [{
            Home_Phone: {
              type: Number,
            },
            Work_Phone: {
              type: Number,
            },
            Cell_Phone: {
              type: Number,
            },
                Phone_verified: [{
                  Home: Boolean,
                  Work: Boolean,
                  Cell: Boolean,
                }],
          }],
    })
    const User = mongoose.model('User', userSchema);
    module.exports = User;
    ここでは、すべてのユーザ情報を一つのオブジェクトに格納します.そして、私たちの3つの電話番号は対象として「Phone euNumbers」という配列に保存されます.「Phone euNumbers」配列には、「Phone-Veriend」というサブ文書があります.これらの電話番号が検証されたかどうかを示す対象配列です.イタチのモデルとしては、これらのデータがどのように組織され、入れ子されているかが分かりやすい.しかし、正確にデータを発表するのはもっと難しいかもしれません.これらのデータをAPIに公開すると、私たちの応答はJSONになり、API呼び出しは以下のようなものになり得る.
    app.post('/api/user', function(req, res) {
      User.create({
        UserID: req.body.userid,
        User_Info: req.body.userinfo,
        First_Name: req.body.firstname,
        Last_Name: req.body.lastname,
        Current_Address: req.body.currentaddress,
        Email_Address: req.body.emailaddress,
        Phone_Numbers: req.body.phonenumbers,
        Home_Phone: req.body.homephone,
        Work_Phone: req.body.workphone,
        Cell_Phone: req.body.cellphone,
        Phone_Verified:
        req.body.phoneverified,
        Home: req.body.home,
        Work: req.body.work,
        Cell: req.body.cell,
      }).then(user => {
        res.json(user)
      });
    });
    私たちのモデルの中のフィールドは、実際のデータの配列名を含まないだけですが、私たちは「Phone euNumbers」、「Phone euVeriend」、「UseruInfo」フィールドを持っています.しかし、私たちのap.postに含める必要があります.さもなくば、この招待状は正常に働くことができません.
    現在、アプリケーションの先頭を作成するには、この依存項をap.jsファイルに含める必要があります.
    const bodyParser = require('body-parser');
    app.use(bodyParser.urlencoded({
      extended: true
    }));
    app.useを呼び出したら、それを「exteded:true」に設定してください.これにより、フロントエンドフォームからデータベースに組み込まれたデータを正しく公開することができます.これは私たちを難題の最後の部分、つまり先端フォームに連れてきました.まずUserIDフィールドを解決しましょう.これは一番簡単です.入れ子ではないからです.Reactを使ってもひげを使っても、他の方法で入力した名前は同じです.このように見えるかもしれません.
    私たちが必要なのは、「名前」が私たちがap.jsファイルで使っている「req.body.userid」とマッチすることを確認することです.今はどうやってユーザー情報の入れ子オブジェクトに投稿しますか?以下の操作を行います.
    ホスト解析器を使っていますので、urlencoded拡張:trueに設定されています.ホスト解析器はこの名前フィールドをネストオブジェクトとして解釈します.「苗字」と「入れ子」の他のフィールドに対して同じ操作を行います.
    現在、より複雑な問題は私達のネスト配列です.私たちはどう発表しますか?はい、よく似たようなことをします.これは再び私たちの体の解像度で説明します.ユーザが一人しかいないと仮定します.このユーザーは家庭用電話1台と携帯電話1台と事務用電話1台だけです.この場合、フォーム入力は以下のようになります.
    しかし、私たちのデータ構造では、各ドキュメントに複数のサブユーザがいるか、または電話を追加する複数の家族や家族のメンバーが必要ですが、まだユーザーに組み込まれています.どうすればいいですか?この場合、電話番号配列を簡単に追加できます.私たちの先端に入力すると少し変化があります.
    次に、私たちの第二の入力は以下のようになります.
    ホスト解析器は、配列のインデックスとして解釈し、電話番号としてユーザのセット内の電話番号配列に追加する.ご覧のように、今は確認済みの電話番号フィールドが電話番号に組み込まれています.これは私たちがここで作ったのととても似ています.このように見えるかもしれません.
    ご覧のように、私たちはここで深いネストデータを発表しています.さらに深いネストデータを使ってこのフォーマットを続けてもいいです.この操作を実行できる他の方法がありますが、この解決策は優雅で簡単で、時間の節約が期待されます.ちなみに、このようにデータを投稿するなら、このフォーマットはPostmanにも適用されます.
    これが役に立つことを望んでいます.もし何かフィードバックや意見があれば、いつでも連絡してください.ありがとうございます.
    原文のリンク:https://hackernoon.com/managing-complex-data-structures-in-nodejs-17b571c0ba04