Виртуальный Mongoose заполнить возвращает массив в массиве - PullRequest
0 голосов
/ 08 июня 2018

Я пытаюсь заполнить дочерний документ ["ENROLLMENTS"] внешним ключом, но при наличии нескольких совпадений он возвращает массив заявок внутри массива.Когда есть только одно совпадение, он возвращает один массив с одним объектом.Не уверен, почему это происходит или исправление.

ожидается: зачисления [{...}, {...}, {...}]

фактические: зачисления [[{...}, {...}, {...}]]

Ниже у меня есть схема для клиента, который имеет виртуальный для регистрации.Они связаны комбинацией клавиш присваивателя и значения.В настоящее время я пытаюсь использовать значение для заполнения документа.

Я открыт и для других решений.

Вот схема клиента

 const clientSchema = new Schema({
   identifiers: [
     {
       value: { type: String, required: true },
       use: { type: String },
       assigner: { type: String, required: true },
       _id: false
     }
   ],
   ...
 },
 {
  timestamps: { createdAt: 'createdAt', updatedAt: 'updatedAt' },
  toJSON: { virtuals: true }
 }
);

Вот мой виртуал с зачислениями, которые пытаются сопоставить в поле значения.

 clientSchema.virtual('enrollments', {
   ref: 'Enrollment',
   localField: 'identifiers.value',
   foreignField: 'subject.value',
   justOne: false
});

Вот схема регистрации

const enrollmentSchema = new Schema(
{
  organization: { type: String, ref: 'Organization' },
  identifiers: [
    {
      value: { type: String, required: true },
      assigner: { type: String, required: true },
      _id: false
    }
  ],
  subject: {
    value: { type: String, required: true },
    assigner: { type: String, required: true },
    _id: false
  },
  enrollmentDate: { type: Date, required: true },
  ...
},
{
   timestamps: { createdAt: 'createdAt', updatedAt: 'updatedAt' },
   toJSON: { virtuals: true }
});

Вот мой метод заполнения

 return await Client.find(query)
 .populate({
   path: 'enrollments',
   model: 'Enrollment',
   populate: {
    path: 'progressNotes',
    model: 'ProgressNote',
    options: {
      limit: 30,
      sort: { 'performed.period.start': -1 }
     }
   },
 })
 .select(Projections.CLIENT_FULL_WITH_ENROLLMENTS())
 .exec();

Вот то, что я получил, вернув

enrollments": [
 [
   {
      "subject": {
         "assigner": "2.16.840.1.113883.3.3519.6.1.32",
         "value": "5"
       },
      "identifiers": [
          {
             "value": "52",
             "assigner": "2.16.840.1.113883.3.3519.6.1.32"
          }
      ],
      "_id": "5b1981dfac3d5a000fb92fc3",
      "progressNotes": [],
      "id": "5b1981dfac3d5a000fb92fc3"
    },
    {
      "subject": {
         "assigner": "2.16.840.1.113883.3.3519.6.1.32",
         "value": "5"
      },
      "identifiers": [
         {
           "value": "7",
           "assigner": "2.16.840.1.113883.3.3519.6.1.32"
         }
       ],
       "_id": "5b1981dfac3d5a000fb92fc2",
       "progressNotes": [],
       }
      ],
      "id": "5b1981dfac3d5a000fb92fc2"
      }
   ]
  ],
...