2015-08-21 3 views
1

Предполагая, что стандартный пример врачей и patiens, используемых StrongLoop (https://docs.strongloop.com/display/public/LB/HasManyThrough+relations):Как фильтровать через модель?

общего/модель/physician.json

{ 
    "name": "Physician", 
    "base": "PersistedModel", 
    "properties": { 
    "name": { 
     "type": "string" 
    } 
    }, 
    "validations": [], 
    "relations": { 
    "patients": { 
     "type": "hasMany", 
     "model": "Patient", 
     "foreignKey": "patientId", 
     "through": "Appointment" 
    }, 

общего/модель/patient.json

{ 
    "name": "Patient", 
    "base": "PersistedModel", 
    "properties": { 
    "name": { 
     "type": "string" 
    } 
    }, 
    "validations": [], 
    "relations": { 
    "physicans": { 
     "type": "hasMany", 
     "model": "Physician", 
     "foreignKey": "physicianId", 
     "through": "Appointment" 
    }, 

общих /models/prointment.json

{ 
    "name": "Appointment", 
    "base": "PersistedModel", 
    "properties": { 
    "appointmentDate": { 
     "type": "date" 
    } 
    }, 
    "validations": [], 
    "relations": { 
    "physician": { 
     "type": "belongsTo", 
     "model": "Physician", 
     "foreignKey": "physicianId" 
    }, 
    "patient": { 
     "type": "belongsTo", 
     "model": "Patient", 
     "foreignKey": "patientId" 
    }, 

Как я могу получить пациента от фильтрации врача по заданию?

Я пытался использовать что-то вроде этого:

Physician.findOne({ 
    "where": {"id": physId}, 
    "include": { 
     "relation": "patients", 
     "scope": { 
      "where": { 
       "appointmentDate": { "gt": fixedDate } 
      } 
     } 
    } 
}, callback); 

но мне кажется, что Loopback ищет appointmentDate на модели пациента, а не на Назначение модели.

Некоторые полезные советы? Спасибо!

+0

Вы должны проверить mongoose :) http://mongoosejs.com Также обратите внимание, что отношения внутри MongoDB не идеальны, поэтому вы можете переосмыслить свои модели баз данных :) –

ответ

-1

Возможно, у вас может быть что-то неправильное в понимании вашего мнго.

Операторы в Монго должны в начале «$», так что ваш GT должен измениться $ GT, где должен измениться $, где

Чтобы получить пациента от фильтрации врача по заданию date, мы можем сделать это на 2 шага, предположим, что у вас есть идентификатор (physId) конкретного врача.

var appointments = Appointment.find({ 
    "relation.physician.foreignKey": physId, 
    "properties.appointmentDate": { $gt: fixedDate } 
}); // get all appointments after fixedDate 
var patients = []; 
appointments.forEach(function(appoint) { 
    patients.push(appoint.relation.patient); 
}) 

return patient; // all patients in appointments 

в узле API Я прочитал метод поиска в доке, его использует, где фильтр для соответствия значения конкретного поля, но я думаю, что это похоже, как происхождение :-)

Appointment.find({ 
    "relation.physician.foreignKey": physId, 
    "properties.appointmentDate": { gt: fixedDate } 
}) 

, а затем вы можете использовать некоторый метод, например _.forEach (underscore.js), чтобы получить пациентов от результата

Желаю, чтобы он смог решить вашу проблему;

+1

О значении $, это не в определении петли. (Https://docs.strongloop.com/display/public/LB/Where+filter). –

+0

Ну, я думаю, что это API, запрос и операторы немного отличаются от оригинального монго, но запрос аналогичен –

+1

. Ваше решение не работает должным образом в Loopback. В любом случае, я справлялся аналогичным образом ... Я искал все встречи с определенной датой, а затем искал врача, связанного с этим назначением. Спасибо, в любом случае! –

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