从流星中的Collection中获取价值

时间:2015-10-09 06:24:17

标签: json mongodb meteor collections

我试图从一个对我来说有点混乱的集合中获取价值。

Collection看起来像这样

{
"_id" : "bqaGRGotKzYiA6mZv",
"0" : {
    "MessageId" : "8B25CEB0-9EC6-48F7-9826-0AC813E903F8",
    "Requested" : ISODate("2015-10-08T16:47:40.173Z")        
},
"1" : {
    "MessageId" : "B02935F0-8492-4858-B8C1-0BCEA9BCC80B",
    "Requested" : ISODate("2015-10-08T16:59:45.503Z")
},
"2" : {
    "MessageId" : "F766B029-BB81-4E6C-90B5-71B51B8F77FA",
    "Requested" : ISODate("2015-10-08T16:47:22.956Z")
},
"3" : {
    "MessageId" : "D88D87EE-CD25-4624-8265-8D66D8D9163A",
    "Requested" : ISODate("2015-10-08T17:24:20.906Z")
    }
}

现在我想向客户端显示一个表格,其中包含"请求" 1列中的值 除了手动指向每个数字之外还有其他方法吗?

这是帮手

 myHelper: function(){
      return Tasks.find();
    }

以下代码将打印" ISODate(" 2015-10-08T16:47:40.173Z")"

{{#each myHelper}}
  {{[0].Requested}}
{{/each}}

但我想要一些自动行动,因为我不知道将收集多少数字。

2 个答案:

答案 0 :(得分:1)

我可能不会告诉您对实现目标的期望或需要,但您采取的收集组织方法对我来说有点奇怪。所以我也会发布我的答案。

如果您有这样的收藏品

{
    "_id": "bqaGRGotKzYiA6mZv",
    "messages": [{
        "MessageId": "8B25CEB0-9EC6-48F7-9826-0AC813E903F8",
        "Requested": ISODate("2015-10-08T16:47:40.173Z")
    }, {
        "MessageId": "B02935F0-8492-4858-B8C1-0BCEA9BCC80B",
        "Requested": ISODate("2015-10-08T16:59:45.503Z")
    }, {
        "MessageId": "F766B029-BB81-4E6C-90B5-71B51B8F77FA",
        "Requested": ISODate("2015-10-08T16:47:22.956Z")
    }, {
        "MessageId": "D88D87EE-CD25-4624-8265-8D66D8D9163A",
        "Requested": ISODate("2015-10-08T17:24:20.906Z")
    }]
}

或者,即使您需要明确地存储项目的ID,如下所示:

{
    "_id": "bqaGRGotKzYiA6mZv",
    "messages": [{
        "id": 0,
        "MessageId": "8B25CEB0-9EC6-48F7-9826-0AC813E903F8",
        "Requested": ISODate("2015-10-08T16:47:40.173Z")
    }, {
        "id": 1,
        "MessageId": "B02935F0-8492-4858-B8C1-0BCEA9BCC80B",
        "Requested": ISODate("2015-10-08T16:59:45.503Z")
    }, {
        "id": 2,
        "MessageId": "F766B029-BB81-4E6C-90B5-71B51B8F77FA",
        "Requested": ISODate("2015-10-08T16:47:22.956Z")
    }, {
        "id": 3,
        "MessageId": "D88D87EE-CD25-4624-8265-8D66D8D9163A",
        "Requested": ISODate("2015-10-08T17:24:20.906Z")
    }]
}

然后您就可以将帮助器中的数据提供给模板,如下所示:

myHelper: function(_id) {
    return Tasks.find({
        _id: _id
    });
}

并像这样使用它:

{{#each myHelper}}
    {{#each message}}
        {{MessageId}}
        {{Requested}}
    {{/each}}
{{/each}}

您还可以将messages项添加到集合项中,如下所示:

var theMessage = {
    "MessageId": "whatever",
    "Requested": "whenever"
}

Tasks.update({
    _id: _id
}, {
    $push: {
        messages: theMessage
    }
});

答案 1 :(得分:0)

创建全局帮助器,将每个对象从集合转换为数组。

Template.registerHelper("convertToArray", function(){
    var self = this; //this points to single object from collection.
    var array = [];
    var keys = _.without(Object.keys(this), "_id");
    keys.forEach(function(key){
        array.push(self[key]);
    }) 
    return array;
});

您可以选择在循环之前对键进行排序。

然后像这样使用它:

{{#each myHelper}}
    {{#each convertToArray}}
      {{Requested}}
    {{/each}}
{{/each}}