Я бы предложил следующую [модель, определение запроса и т. Д.], Как показано ниже - она основана на том факте, что вы пошли по «концептуальному» маршруту (вы также можете использовать простые массивы и слегка запросить массив дней / часов).другая модель но это на другой день).Ваш запрос (выше) не будет работать, потому что вы не можете «шагнуть» по объектам в определении вашего запроса - он не похож на базу данных SQL (просто чтобы прояснить это).
Модель нижеобеспечивает концепцию Availability
для записи матрицы доступности доктора в активе Schedule
(отсюда и связь с доктором).Кроме того, это массив концепций, позволяющих составлять почасовые расписания в течение каждого дня для этого идентификатора расписания.Наконец, врач (или группа врачей) - может быть связан с этим графиком - если он один на один, то, очевидно, вам нужно предоставить только одну запись «врача».Смотрите мой пример данных JSON для schedule
ниже.Аналогично, врач (участник) может иметь отношение к одному или нескольким графикам (или нет, в зависимости от обстоятельств - вариант все равно есть), как вы увидите у участника Doctor
, у меня есть дополнительный schedule
(массив расписаний) - в этом случае он будет хранить данные концепции (внутри актива) в фактической записи участника (тогда вы запросите это вместо этого) - но вы можете не захотеть управлять данными расписания внутри участника для очевидногопричины).Примечание: это всего лишь одно предложение, основанное на том, что вы опубликовали, - существует множество способов очистить апельсин: -)
participant Doctor identified by doctorID {
o String doctorID
o String contact
o String doctorName
o String description
o Schedule[] schedule optional // see comment below
}
asset Schedule identified by scheduleID {
o String scheduleID
o Availability[] availability
--> Doctor[] doctor
}
concept Availability {
o WeekDay Day
o Hours Hour
}
enum WeekDay {
o MON
o TUE
o WED
o THU
o FRI
o SAT
o SUN
}
enum Hours {
o H00
o H01
o H02
o H03
o H04
o H05
o H06
o H07
o H08
o H09
o H10
o H11
o H12
o H13
o H14
o H15
o H16
o H17
o H18
o H19
o H20
o H21
o H22
o H23
}
С помощью этой модели вы можете теперь определить свой концептуальный запрос.
Пример 1:
query doctordoctor1 {
description: "Select all doctors available at 1st hour on MON only"
statement: SELECT org.acme.mynetwork.Schedule
WHERE ( availability CONTAINS (Day == "MON" AND Hour == "H01" ) )
}
вернет только Расписание № 4 и, следовательно, Доктора № 1 и № 2 (а не Доктора 3 или 4)
Пример 2:
query doctordoctor2 {
description: "Select all doctors available at 1st hour - any day"
statement: SELECT org.acme.mynetwork.Schedule
WHERE ( availability CONTAINS (Hour == "H01" ) )
}
вернет Расписание № 4 и № 5, что означает, что врачи № 1 и № 2, а также плюс, врачи № 3 и № 4 будут совпадать.
Просьба учесть, что НЕ вернет данные Доктора.профиль в этом запросе, пожалуйста, обратите внимание - вы можете вызвать запрос в транзакции, а затем получить соответствующую информацию о докторе (то есть, если требуется) для каждого найденного доктора, поскольку существует связь с возвращенным объектом запроса (расписание).
=================== ДАННЫЕ ========= (оставлено здесь, но можно положить в пастин)
{
"$class": "org.acme.mynetwork.Schedule",
"scheduleID": "4",
"availability": [
{
"$class": "org.acme.mynetwork.Availability",
"Day": "MON",
"Hour": "H01"
},
{
"$class": "org.acme.mynetwork.Availability",
"Day": "MON",
"Hour": "H02"
},
{
"$class": "org.acme.mynetwork.Availability",
"Day": "MON",
"Hour": "H03"
},
{
"$class": "org.acme.mynetwork.Availability",
"Day": "TUE",
"Hour": "H04"
},
{
"$class": "org.acme.mynetwork.Availability",
"Day": "TUE",
"Hour": "H05"
},
{
"$class": "org.acme.mynetwork.Availability",
"Day": "TUE",
"Hour": "H06"
}
],
"doctor": [
"resource:org.acme.mynetwork.Doctor#1",
"resource:org.acme.mynetwork.Doctor#2"
]
}
следующий элемент
{
"$class": "org.acme.mynetwork.Schedule",
"scheduleID": "5",
"availability": [
{
"$class": "org.acme.mynetwork.Availability",
"Day": "WED",
"Hour": "H01"
},
{
"$class": "org.acme.mynetwork.Availability",
"Day": "WED",
"Hour": "H02"
},
{
"$class": "org.acme.mynetwork.Availability",
"Day": "THU",
"Hour": "H03"
},
{
"$class": "org.acme.mynetwork.Availability",
"Day": "FRI",
"Hour": "H04"
},
{
"$class": "org.acme.mynetwork.Availability",
"Day": "SAT",
"Hour": "H05"
},
{
"$class": "org.acme.mynetwork.Availability",
"Day": "SAT",
"Hour": "H06"
}
],
"doctor": [
"resource:org.acme.mynetwork.Doctor#3",
"resource:org.acme.mynetwork.Doctor#4"
]
}
==== КОД для вызова запроса из процессора транзакций - или просто вызовите его
из REST API
/**
* Track the schedule
* @param {org.acme.mynetwork.doctor} doctor - the query object as a trxn
* @transaction
*/
function doctor(doctor) {
console.log('got inside doctor function');
return query('doctordoctor') //
.then(function (results) {
var schedule_asset = [];
for (var n = 0; n < results.length; n++) {
var schedule_asset = results[n];
console.log('The transaction object ' + (n+1) + ', object is ' + schedule_asset);
console.log('Schedule identifier is: ' + schedule_asset.getIdentifier());
console.log(' Doctor id is ' + schedule_asset.doctor[0].getIdentifier());
}
});
}