2017-01-09 2 views
0

Я пытаюсь вытащить array из другой коллекции, используя collection2. Я был в состоянии сделать это с объектами, используя следующий пример для пользователей:Meteor cross collection массивы

\t users: { 
 
\t type: String, 
 
\t label: "Inspector", 
 
\t optional: true, 
 
\t autoform: { 
 
\t  firstOption: 'Choose an Inspector', 
 
\t  options: function() { 
 
\t  return Meteor.users.find({}, { 
 
\t   sort: { 
 
\t   profile: 1, 
 
\t   firstName: 1 
 
\t   } 
 
\t  }).map(function(c) { 
 
\t   return { 
 
\t   label: c.profile.firstName + " " + c.profile.lastName, 
 
\t   value: c._id 
 
\t   }; 
 
\t  }); 
 
\t  } 
 
\t } 
 
\t },

Я хотел бы сделать то же самое, но для массива объектов. Вот как выглядит исходные данные, как:

{ 
 
    "_id": "xDkso4FXHt63K7evG", 
 
    "AboveGroundSections": [{ 
 
    "sectionName": "one" 
 
    }, { 
 
    "sectionName": "two" 
 
    }], 
 
    "AboveGroundItems": [{ 
 
    "itemSection": "one", 
 
    "itemDescription": "dfgsdfg", 
 
    "itemCode": "dsfgsdg" 
 
    }, { 
 
    "itemSection": "two", 
 
    "itemDescription": "sdfgsdfg", 
 
    "itemCode": "sdfgsdgfsd" 
 
    }] 
 
}

Вот что моя функция выглядит следующим образом:

agSection: { 
 
    type: String, 
 
    optional: true, 
 
    autoform: { 
 
     firstOption: 'Select A Section Type', 
 
     options: function() { 
 
     return TemplateData.find({}, { 
 
      sort: { 
 
      AboveGroundSections: 1, 
 
      sectionName: [0] 
 
      } 
 
     }).map(function(c) { 
 
      return { 
 
      label: c.AboveGroundSections.sectionName, 
 
      value: c.AboveGroundSections.sectionName 
 
      } 
 
     }); 
 
     } 
 
    } 
 
    },

Я знаю, что это, это просто не потянув за меня данные. Я уверен, я просто пропустил что-то маленькое. Я пытаюсь вытащить все объекты в массиве AboveGroundSection.

ответ

0

Ваш .map() итерация по набору документов но не над массивов внутри каждого документа. Также я не думаю, что ваша сортировка будет работать так, как вы надеетесь, из-за внутреннего гнездования.

Try:

agSection: { 
    type: String, 
    optional: true, 
    autoform: { 
    firstOption: 'Select A Section Type', 
    options() { 
     let opt = []; 
     TemplateData.find().forEach(c => { 
     c.AboveGroundSections.forEach(s => { opt.push(s.sectionName) }); 
     }); 
     return opt.sort().map(o => { return { label: o, value: o } }); 
    } 
    } 
}, 

Кроме того, если ваш AboveGroundSections массив имеет только один ключ для каждого элемента, то можно упростить:

"AboveGroundSections": [ 
    { "sectionName": "one" }, 
    { "sectionName": "two" } 
] 

To:

"AboveGroundSections": [ 
    "one", 
    "two" 
] 
Смежные вопросы