2016-08-12 22 views
0

我最近不得不將使用ASP.NET Core 1.0完成大量工作的項目轉換爲Node.js.我絕對超出了我的舒適範圍,對JavaScript幾乎一無所知,並且擁有ASP的良好生活,使我無需親自執行JSON就可以序列化C#類。 Node希望我自己做JSON,這是我的一段糟糕的時光。JSON(node/express)和JSON數組中的自定義「類型」

這是一個健身應用程序。你的客戶有一些進步,包含他們的升降機和東西。在C#,也就是在一個鍛鍊對象,如下所示:

public struct Progress 
    { 
     public Workout[] Workouts; 
    } 

鍛鍊是含有之類的東西定時,集合,重複,所有的好東西可重複使用的對象。我可以在需要它的每個模式中重新編寫Workouts對象,但是必須有更好的方法嗎?我閱讀了有關$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

你是問,如果一個模式可以使用另一個架構的嵌入式文件? –

+0

@JasonCust也許?我在一些不同的模式中使用Workouts模式,所以我想避免一次又一次地在不同的模式中編寫它,只是像「進步:鍛鍊」那樣調用。有任何想法嗎? – KingDan

+0

這取決於您是否期望將相同的數據包含在不同的模式中,或者您是否只需要相同的結構。例如,如果給定一個由ClientSchema創建的包含'client.progress []。workouts'子文檔的文檔,這個子文檔所代表的數據是否只需要從這個特定的客戶文檔中訪問,或者是否需要成爲另一份文件(客戶或其他)的子文件? –

回答

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我不確定你的意思,但如果你指的是「鍛鍊」是一個列表,那麼你可以編輯模式爲:'鍛鍊:[WorkoutListSchema]'。 –

+0

這絕對是我想要的。你是一顆完美的寶石。謝謝 :) – KingDan