存在时,返回父文档中的嵌入文档

时间:2016-03-16 03:26:03

标签: mongodb meteor

如果只有data存在时,如何将光标返回到{{#each data}}引用的嵌入文档。 需要光标,以便可以在模板 var obj = ActiveTaskCol.find({action: selectedTask, data: {$exists:true}},{field: {data: 1}}); if (obj.count() > 0) { console.log(obj.text); 中使用它。

<top (required)>': undefined method

当数据字段存在时,此Meteor代码会正确返回true,但var obj是父文档的游标,而不是数据嵌入文档。 我怎样才能解决这个问题?感谢

enter image description here

1 个答案:

答案 0 :(得分:1)

我认为您不能使用简单的find返回嵌入文档。基于你的previous question和这个问题,我建议你使用这样的东西(我自己从来没有在火焰上迭代游标),

Template.index.helpers({
    taskInputs: function () {
        var ready = Meteor.subscribe('inputsCol').ready();
        var data = InputsCol.find({});

        var selectedTask = Session.get('taskSelected');
        var obj = ActiveTaskCol.find({
            action: selectedTask,
            data: { $exists: true }
        }, {
            field: {data: 1}
        });
        if (obj.count() > 0) {  
            return {items: obj, isActiveTaskCol: true };
        } else {
            return {items: data, ready: ready};
        }
    }
});

在你的模板html中,

<template name="index">
    {{#if taskInputs.isActiveTaskCol}}
        {{> listItem taskInputs.items.data}}
    {{else}}
        {{> listItem taskInputs.items}}
    {{/if}}
</template>

<template name="listItem">
    {{#each this}}
        <div>Do whatever you want here like {{this.taskName}}</div>
    {{/each}}
</template>

您可以直接在助手中使用fetch来获取数组并使用下划线来获得所需的结果。

Template.index.helpers({
    taskInputs: function () {
        var ready = Meteor.subscribe('inputsCol').ready();
        var data = InputsCol.find({}).fetch();

        var selectedTask = Session.get('taskSelected');
        var items = ActiveTaskCol.find({
            action: selectedTask,
            data: { $exists: true }
        }, {
            field: {data: 1}
        }).fetch();
        if (items.length > 0) {  
            items = _.pluck(item, 'data'); //this transforms [ { data: "item1" }, { data: "item2" } ] to [ "item1", "item2" ]
            return {items: items };
        } else {
            return {items: data, ready: ready};
        }
    }
});

在你的模板html中,

<template name="index">        
    {{#each taskInputs.items}}
        <div>Do whatever you want here like {{this.taskName}}</div>
    {{/each}}
</template>

希望有所帮助