我有以下数据集示例:
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?
答案 0 :(得分:0)
这应该只返回嵌入的文档:
SampleCol.find({Embedded_1: {$elemMatch:{key1:'x3'}}}, {fields: {Embedded_1: true}})