Meteor Blaze模板未显示已过滤的Mongodb嵌入式集合

时间:2015-05-29 13:02:17

标签: mongodb meteor meteor-blaze

我有以下数据集示例:

SampleCol.insert({
    Name: "John Doe",
    Description: "Nice Guy",
    Embedded_1: [{
        key1: 'x1',
        key2: 'x2',
        TariffTypes: [{
            TariffCode: 'Promocional',
            Price: 125,
            Weekdays: ['Sun', 'Sat']              
        },
        {
            TariffCode: 'LastMinute',
            Price: 150,
            Weekdays: ['Sun', 'Sat']   
        }], 
        },
        {
        key1: 'x3',
        key2: 'x4',
           TariffTypes: [{
                TariffCode: 'Promocional',
                Price: 175,
                Weekdays: ['Sun', 'Sat']           
            },
            {
                TariffCode: 'LastMinute',
                Price: 200,
                Weekdays: ['Sun', 'Sat']
            }] 
        }]
    });

我正在尝试过滤并在我的模板上仅显示带有key1 =' x1'的Embedded_1。这是模板:

  <template name="test2">
   {{#each items}}
    {{# each Embedded_1}}
        {{this.key1}}
    {{/each}}
   {{/each}} 
  </template>

我尝试了以下和模板助手版本:

版本1返回x1和x3:

Template.test2.helpers({
  items: function () {
     collection = SampleCol.find({'Embedded_1.key1': 'x1'});
  return collection;
  }
 });

这也会返回所有结果:

       collection = SampleCol.find({Embedded_1: {$elemMatch: { key1: 'x1'}}});

两种情况下的退出是:      x1x3

它应该只显示x1。

错误在哪里?

编辑:我已经按照Mark Leiber和BraveKenny建议的答案,他们帮助解决Mongodb输出问题。我现在可以通过以下命令获得Mogo shell所需的结果:

db.SampleCol.find({},{_id:0, Embedded_1: {$elemMatch: {key1:"x1"}}})

这解决了Mongo部分。但是,我猜这个问题也与这个结果如何与Meteor Blaze的模板相互作用有关。模板&#34; test2&#34;不断出现整个集合而不是我们刚刚过滤的内容。

那里有任何提示吗?

编辑#2 这确实是Blaze模板问题。上面的Mongo find()代码只能正确返回key =&#39; x1&#39;结果。它甚至剥离了父文档和数据,如名称和描述:

{
  Embedded_1: [{
        key1: 'x1',
        key2: 'x2',
        TariffTypes: [{
            TariffCode: 'Promocional',
            Price: 125,
            Weekdays: ['Sun', 'Sat']              
        },
        {
            TariffCode: 'LastMinute',
            Price: 150,
            Weekdays: ['Sun', 'Sat']   
        }], 
        };

但是,模板仅显示如下所示的任何结果,包括{{#each items}} {{/ each}}行

 <template name="test2">
   {{#each items}}
    {{Name}} <br>
    {{Description}}<br>
    {{#each Embedded_1}}
       {{this.key1}} <br>
       {{#each TariffTypes}}
            {{this.Price}} <br>
        {{/each}}
   {{/each}}
{{/each}}
</template>

尽管模板帮助器没有返回Name和Description,但它确实在浏览器上一起显示它们。它显示如下:

John Doe
Nice Guy
x1 
125 
150 
x3 
175 
200 

我让测试人员拿出{{#each items}}或{{#each Embedded_1}},但都没有。

如何编写模板Blaze?

1 个答案:

答案 0 :(得分:0)

这应该只返回嵌入的文档:

SampleCol.find({Embedded_1: {$elemMatch:{key1:'x3'}}}, {fields: {Embedded_1: true}})