2016-08-12 14 views
0

最近、ASP.NET Core 1.0で多くの作業を行ったプロジェクトをNode.jsに変換する必要がありました。私はJavaScriptについてほとんど何も知らず、JSONを自分でやらなくても、ASPの良い生活を送ってくれて、私のためにC#クラスをシリアライズしています。ノードは私がJSONを自分自身でやって欲しいと願っています。JSON(ノード/エクスプレス)とJSON配列のカスタム "タイプ"

フィットネスアプリです。クライアントにはリフトや物資が入った進捗状況があります。以下に見られるように、C#では、それは、ワークアウト対象である:

public struct Progress 
    { 
     public Workout[] Workouts; 
    } 

ワークアウトは、タイミング、設定、繰り返し、すべての良いもののようなものを含む再利用可能なオブジェクトです。ワークスペースオブジェクトを必要とするすべてのスキーマに1つずつ書き直すことができますが、より良い方法が必要ですか?私は$schema$refについて読んでいますが、それらの使い方やこれが正しいキーワードのアプリケーションであるかどうかはよくわかりません。

最後に、このカスタムワークアウトオブジェクトの配列をどのように定義しますか?

これは私のJSONオブジェクトで、これまでの内容はclient.jsです。進歩のビットは私が理想的に達成したいことです。

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var ClientSchema = new Schema({ 
    measurements: [{ 
     height: Number, 
     weight: Number 
    }], 
    personal_information: [{ 
     birthday: Date, 
     gender: String 
    }], 
    contact_information: [{ 
     phone: String, 
     email: String 
    }], 
    progress: [{ 
     workouts: WorkoutList 
    }] 
}); 
+0

1つのスキーマが埋め込まれた文書に別のスキーマを使用することができれば、あなたは求めていますか? –

+0

@JasonCustおそらく?私はいくつかの異なるスキーマでWorkoutsスキーマを使用していますので、別のスキーマで繰り返し記述することは避けたいと思います。「進捗状況:Workout」などと呼んでください。何か案は? – KingDan

+0

異なるスキーマに同じデータが含まれているかどうか、または同じ構造を必要とするかどうかによって異なります。例えば、 'client.progress [] .workouts'サブドキュメントを含む' ClientSchema'から作成されたドキュメントがあれば、このサブドキュメントによって表されるデータはこの特定のクライアントドキュメントからアクセス可能である必要がありますか、別の文書(クライアントなど)のサブ文書にする –

答えて

1

あなただけの、あなたが作成することができ、様々な他のモデルで使用できる共通のデータ構造をしたい場合は、様々な他のスキーマによって使用されるsub-doc schema(つまり、または独自のモデルを持っていないかもしれない場合があります)。

注:これはシングルトンスキーマオブジェクトを提供します。これは、あるモデルを変更する場合、後で使用する他のモデルに伝播されることを意味します。これが気になる場合は、workout-list-schema.jsを毎回新しいスキーマオブジェクトを返すファクトリ関数に変換することができます。

トレーニングリスト - schema.js

var mongoose = require('mongoose'); 
var Schema = mongoose.Schema; 

var WorkoutListSchema = module.exports.WorkoutListSchema = new Schema({ 
    // some schema 
}); 

クライアントschema.js

var mongoose = require('mongoose'); 
var WorkoutListSchema = require('./workout-list-schema').WorkoutListSchema; 
var Schema = mongoose.Schema; 

var ClientSchema = new Schema({ 
    measurements: [{ 
    height: Number, 
    weight: Number 
    }], 
    personal_information: [{ 
    birthday: Date, 
    gender: String 
    }], 
    contact_information: [{ 
    phone: String, 
    email: String 
    }], 
    progress: [{ 
    workouts: WorkoutListSchema 
    }] 
}); 
+0

これは素晴らしいです、ありがとう!ワークアウトリストスキーマを実際のリスト(ワークアウトのようなもの)にする方法を知っていますか? – KingDan

+0

@KingDanあなたが意味することは分かりませんが、 'workouts'をリストにすることを指している場合は、スキーマを' workout:[WorkoutListSchema] 'に編集できます。 –

+0

それは私が絶対に望んでいたものです。あなたはトータルな宝石です。ありがとうございました :) – KingDan