У меня есть следующий пример набора данных:Метеор Blaze шаблон не показывает отфильтрованный MongoDB встроенной коллекции
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']
}]
}]
});
Я пытаюсь фильтровать и показать на моем шаблоне только Embedded_1 с ключ1 = «x1». Вот шаблон:
<template name="test2">
{{#each items}}
{{# each Embedded_1}}
{{this.key1}}
{{/each}}
{{/each}}
</template>
Я попытался следующие и вспомогательные шаблона версии:
Version 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.
Где ошибка?
EDIT: Я следовал рекомендациям Марка Лейбера и BraveKenny, и они помогают решить выход Mongodb. Я могу получить на Mogo скорбь желаемый результат с помощью следующей команды:
db.SampleCol.find({},{_id:0, Embedded_1: {$elemMatch: {key1:"x1"}}})
Это решает часть Монго. Однако, я думаю, эта проблема также связана с тем, КАК этот результат взаимодействует с шаблоном Meteor Blaze. Шаблон «test2» продолжает показывать всю коллекцию, а не только что мы просто фильтровали.
Есть ли намеки на это?
EDIT # 2 Это действительно проблема шаблон Blaze. Код Mongo find() выше правильно возвращает только результаты key = 'x1. Он даже удаляет родительский документ и данные, такие как название и описание:
{
Embedded_1: [{
key1: 'x1',
key2: 'x2',
TariffTypes: [{
TariffCode: 'Promocional',
Price: 125,
Weekdays: ['Sun', 'Sat']
},
{
TariffCode: 'LastMinute',
Price: 150,
Weekdays: ['Sun', 'Sat']
}],
};
Однако шаблон показывает только любой результат, если написано, как показано ниже, в том числе {{пунктов #each}} {{/}} каждой line
<template name="test2">
{{#each items}}
{{Name}} <br>
{{Description}}<br>
{{#each Embedded_1}}
{{this.key1}} <br>
{{#each TariffTypes}}
{{this.Price}} <br>
{{/each}}
{{/each}}
{{/each}}
</template>
Несмотря на то, что помощник шаблона не возвращается Имя и описание, оно отображает их в браузере вместе. Он показывает, как это:
John Doe
Nice Guy
x1
125
150
x3
175
200
Я имею тестер вынимая {{#each пункты}} или {{#each Embedded_1}} и ни работал.
Как должен быть написан шаблон Blaze?
[Интересно читать] (http://stackoverflow.com/questions/3985214/retrieve-only-the-queried-element-in-an-object -array-in-mongodb-collection) – SylvainB
Возможный дубликат [MongoDB - Фильтрация содержимого внутреннего массива в наборе результатов] (http: // stackoverflow.com/questions/4701427/mongodb-filtering-the-content-of-the-internal-array-in-a-resultset) –
Вы просто находите любой документ, соответствующий вашим критериям, поэтому ваш документ будет возвращен. Вам нужно отфильтровать возвращаемое содержимое. См. Дублируемую ссылку, которую я опубликовал. –