2016-08-12 4 views
0

Мне недавно пришлось преобразовать проект, который выполнял большую работу с ASP.NET Core 1.0 до Node.js. Я абсолютно вне зоны комфорта, почти ничего не знаю о JavaScript и хорошо провел серию ASP классов C# для меня, без меня сам я должен был сделать JSON. Узел хочет, чтобы я сам сделал JSON, с которым у меня плохое время.Пользовательские «типы» в JSON (узел/экспресс) и массивы JSON

Это приложение для фитнеса. У вас есть клиенты с некоторым прогрессом, содержащим лифты и прочее. В C#, то есть в объекте тренировками, как показано ниже:

public struct Progress 
    { 
     public Workout[] Workouts; 
    } 

Разминки является повторно используемый объект, содержащий такие вещи, как выбор времени, наборы, повторений, все хорошие вещи. Я мог бы просто переписать объект Workouts в каждой из моих схем, которые ему нужны, но должен быть лучший способ? Я прочитал что-то около $schema и $ref, но я не знаком с их использованием или если это правильное применение этих ключевых слов.

Наконец, как бы я определил массив этого настраиваемого объекта Workout?

Это мой объект 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, может быть? Я использую схему тренировок в нескольких других схемах, поэтому я бы хотел не писать это снова и снова в разных схемах и просто называть «прогресс: тренировка». Есть идеи? – KingDan

+0

Это зависит от того, ожидаете ли вы, что одни и те же данные будут включены в разные схемы или если вам нужна только одна и та же структура. Например, если документ, созданный из «ClientSchema», который включает в себя под-документ 'client.progress []. Workouts', будут ли данные, представленные этим поддоку, доступными только из этого конкретного клиентского документа или ему также понадобится быть поддокументом в другом документе (клиенте или иным образом)? –

ответ

1

Если вы хотите общую структуру данных, которая может быть использована в различных других моделях, то вы можете создать sub-doc schema (который может или, возможно, не имеет свою собственную модель), которая будет использоваться различными другими схемами.

ПРИМЕЧАНИЕ. Это обеспечивает объект схемы singleton, что означает, что если вы хотите изменить его на одну модель, оно будет распространено на любые другие модели, которые впоследствии будут использовать его. Если это вызывает беспокойство, вы можете преобразовать 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

Это замечательно, спасибо! Вы знаете, как сделать схему workoutlist фактическим списком (например, массивом тренировок)? – KingDan

+0

@KingDan Я не уверен, что вы имеете в виду, но если вы имеете в виду «тренировки», являющиеся списком, тогда вы можете отредактировать схему: «workouts: [WorkoutListSchema]». –

+0

это абсолютно то, что я хотел. Ты настоящий жемчуг. Спасибо :) – KingDan

Смежные вопросы