Получить вложенные документы коллекции в качестве результата поиска

Я работаю с meteor и MongoDB над небольшим проектом, я заменил переменную js, которая получает словари, на коллекцию под названием Toolbar:

if (Meteor.isServer) {

    Meteor.startup(function () {
        if (Toolbars.find().count() == 0) {
            Toolbars.insert(
                {
                    name: 'main_toolbar',
                    title: 'Main toolbar',
                    items: [
                        {
                            name: 'Play buttons',
                            class: '',
                            help_text: '',
                            items: [
                                {
                                    name: 'Backward',
                                    class: 'backward',
                                    help_text: ''
                                },
                                {
                                    name: 'Play',
                                    class: 'play'
                                },
                                {
                                    name: 'Forward',
                                    class: 'forward'
                                },
                                {
                                    name: 'name',
                                    class: 'stop'
                                }
                            ]
                        },
                        {
                            name: 'Playback tools',
                            class: 'col-xs-12 col-md-3',
                            help_text: '',
                            items: [

                                {
                                    name: 'Playback progress',
                                    class: 'playback'
                                },
                                {
                                    name: 'Metronome',
                                    class: 'clock-o'
                                }
                            ]
                        },
                        {
                            name: 'Tools',
                            class: '',
                            help_text: '',
                            items: [
                                {
                                    class: 'save'
                                },
                                {
                                    class: 'plus'
                                }
                            ]
                        },
                        {
                            name: 'View tools',
                            class: '',
                            help_text: '',
                            items: [
                                {
                                    class: 'search-plus'
                                },
                                {
                                    class: 'search-minus'
                                }
                            ]
                        },
                        {
                            name: 'Sheet tools',
                            class: '',
                            help_text: '',
                            items: [
                                {
                                    class: 'hashtag'
                                },
                                {
                                    class: 'wrench'
                                },
                                {
                                    class: 'align-justify'
                                },
                                {
                                    class: 'arrows-alt'
                                }

                            ]
                        },
                        {
                            name: 'Info',
                            class: '',
                            help_text: '',
                            items: [
                                {
                                    class: 'info-circle'
                                }
                            ]
                        }
                    ]
                }
            );
            console.log("startup.js says: " + Toolbars.find().count());
        }
    });

}

Мне нужно получить с этой панели инструментов все элементы как Выйдите к следующему поиску:

Template.play_toolbar.helpers({
        // group: music_toolbar,
        group: Toolbars.find({name: 'main_toolbar'}, {items: 1}),
        ifProgressBar: function (name) {
            return name === 'playback'
        }
    });

Так как мой шаблон генерирует группы кнопок с классом и именем каждого элемента, а с каждым подэлементом генерирует кнопки:


Проблема, с которой я столкнулся сейчас, заключается в том, что группы берут один элемент за одну статью и печатают на экране одну группу с названием существующей коллекции и в качестве подэлементов - костяные кнопки - элементы коллекции.

Toma cómo elemento la colección y como sub elementos los elementos de la colección.

Как разместить запрос (запрос) так, чтобы его результатом были только элементы коллекции, чтобы итерация, содержащаяся в Может ли основная итерация, итерация кнопки внутри итерации группы кнопок, быть напечатана правильно?

Если это невозможно сделать с помощью запроса, то как я могу создать список с вложенными документами? из упомянутой коллекции?

1
задан 21.03.2016, 00:19
1 ответ

Отлаживая код с консоли chrome я смог видеть это: Depurando node desde el navegador

Чтобы мочь предохранять сообщения консоли в клиенте необходимо включать выбор Предохраните Log консоли браузера (только я увидел этот выбор в Chrome).

Мы находим функцию fecth:

cursor.fetch () minimongo/minimongo.js, line 199

Return all matching documents схвати an Array.

When called from в reactive computation, fetch registers dependencies on the matching documents.

Проблема состоит в том, чтобы использовать это, где, я использую meteor, и если я это размещаю снаружи helperшаблона, который это использует тогда, оно не функционирует, для этого мы изменяем функцию helpersшаблона:

Template.play_toolbar.helpers({
        group: function(){
            var main = Toolbars.find({name: 'main_toolbar'}, {items: 1, _id: 0}).fetch();
            console.log(main);
            return main[0].items
        },
        // group: music_toolbar,
        ifProgressBar: function (name) {
            return name === 'playback'
        }
    });

Если мы отлаживаем код с браузера, мы можем замечать, что mainэто объект договоренность объектов, и наш "query" только приносит единственный объект, однако это продолжать быть списком объектов, из-за чего мы должны получать объект, для этого мы используем Ваш индекс, которого 0, следовательно направляем main[0].

Но если мы получаем этот элемент, это продолжать быть объектом, и у нас хочет быть договоренность sub объекты, которые он соответствует субдокументам коллекции. Мы можем получать их, если мы видим основательно, что у этого объекта есть внутри свойство, названное элементы, где он sub объекты, следовательно звоним в этот список таких объектов: main[0].items.

Полученный результат - в конце концов желанный: Barra de herramientas en la colección

Вот и все.

1
ответ дан 24.11.2019, 14:42