NodeJSでは複雑なデータ構造を管理します.
6253 ワード
新しいプロジェクトを始める時、データをどのように正しく整理するかは、まず解決すべき問題の一つです.ユーザのデータを記憶する必要があると仮定する.Mongoを使ってデータをセットに保存します.二つのオプションがあります.例えば、私たちは各ユーザの以下のデータを保存する必要があると仮定する.
ユーザ情報:ユーザID 名前は です.名字は です.現在のアドレス メールアドレス 家庭電話 勤務電話 携帯電話 電話番号は検証されましたか?
このデータを処理する方法の一つは、リスト内の各項目に対して個別のアーキテクチャを作成することである.その後、他のモードのデータを参照するためにモード参照を行うことができます.このように見えます.
現在、アプリケーションの先頭を作成するには、この依存項をap.jsファイルに含める必要があります.
これが役に立つことを望んでいます.もし何かフィードバックや意見があれば、いつでも連絡してください.ありがとうございます.
原文のリンク:https://hackernoon.com/managing-complex-data-structures-in-nodejs-17b571c0ba04
ユーザ情報:
このデータを処理する方法の一つは、リスト内の各項目に対して個別のアーキテクチャを作成することである.その後、他のモードのデータを参照するためにモード参照を行うことができます.このように見えます.
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