2013-12-22 4 views
0

Я уже давно копался в этом, не нашел ответа, и ничего подобного я не хочу делать в Google, поэтому я пришел сюда, чтобы задать этот вопрос.Наполнять модель модели на mongoose

Как вы заполняете схему как это?

var category_schema = new mongoose.Schema({ 
    name: {required: true, type: String}, 
    parent: {type: Number, ref: 'Category' }, 
    categories: [ {type: Number, ref: 'Category'} ] 
}); 

Что я делаю сейчас это:

Но делать console.log по категориям будет отображаться на консоли:

[ { __v: 2, 
    _id: 18, 
    name: 'Categoria', 
    parent: null, 
    categories: 
    [ { __v: 1, 
     _id: 19, 
     name: 'Children', 
     parent: 18, 
     categories: [Object] }, // <= THIS SHOULD HAVE ACTUAL CATEGORIES 
     { _id: 20, name: 'Children 2', parent: 18, __v: 0, categories: [] } ] } ] 

Любой вид помощи будет будем очень благодарны.

Спасибо.

Edit:

Это то, что я использую, чтобы показать им, до

ul.list-group 
    if inputs == true 
    li.list-group-item 
     .radio 
     label 
      input(type='radio', class='radio', name='parent_id' value='0') 
      = 'No category' 
    mixin make_list(categories, edit) 
    each category in categories 
     li.list-group-item 
     .radio 
      if inputs == true 
      input(type='radio', name='parent_id', value='#{category._id}') 
      = category.name 
    if categories.length 
    each category in categories 
     li.list-group-item 
     .radio 
      label 
      if inputs == true 
       input(type='radio', name='parent_id', value='#{category._id}') 
      = category.name 
     if category.categories.length 
     ul 
      +make_list(category.categories, edit) 

Поскольку у меня не было никаких ответов, я начал рыть сам о том, как это сделать ...

Теперь это может быть не лучший способ сделать это, но хорошо;

category_schema.static('make_tree', function(callback) { 
    Category.find(function(err, categories) { 
    var parents_array = []; 
    for(var i = 0; i < categories.length; i++) { 
     var category = categories[i]; 
     if (category.parent == null || category.categories.length) { 
     categories[i].categories = []; 
     parents_array.push(categories[i]); 
     } 
    } 

    for(var x = parents_array.length -1; x >= 0; x--) { 
     for(var y = 0; y < categories.length; y++) { 
     if (categories[y].parent === parents_array[x]._id) { 
      console.log('adding ' + categories[y].name + ' to ' + parents_array[x].name); 
      parents_array[x].categories.push(categories[y]); 
     } 
     } 
    } 

    console.log(parents_array); 
    // Remove parents which have parents. 
    for(var i = parents_array.length - 1; i >= 0; i--) { 
     if (parents_array[i].parent) { 
     parents_array.splice(i, 1); 
     } 
    } 

    callback(parents_array); 
    }); 
}); 

Вещь ..., я все еще получаю это когда я делаю журнал консоли:

PARENTS ARRAY NOW 
[ { __v: 1, 
    _id: 23, 
    name: 'Categoria', 
    parent: null, 
    categories: [ { parent: 23, name: 'Hijo', _id: 24, __v: 2, categories: [Object] } ] } ] 

ответ

1

Я думаю, вы могли испытывать превратности консоли узла. Что произойдет, если вы сделаете console.log(categories[0].categories)? (предполагается, что categories - это имя этого объекта fisrt.

+0

http://pastebin.com/RMGfZnDD Это то, что печатается – maltray

+0

Так что это ссылки на категории в db. Я не мангуст, но это выглядит так: вам просто нужно сделать дополнительные вызовы методов для этих категорий. – Maus

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