Метеор-коллекция.найти() всегда возвращает все поля


столкнулся с этой (слегка раздражающей проблемой) я пытаюсь найти все записи в коллекции и не показывать (или показывать) определенное поле (Счет). Это просто пример, а не отражение моего фактического кода, но проблема всегда воспроизводима. Поля, которые я исключаю, очень большие, и я просто пытаюсь создать меню доступных записей.

команд

    players.find({},{score:1})
    players.find({},{score:0})

всегда возвращайте каждое поле, вместо того, чтобы запускать exclude/include в mongodb. Я ни о чем не беспокоюсь, так как шаблон потенциально может контролировать, какие данные отображаются в html? По-прежнему кажется, что данные передаются на клиентскую сторону независимо; и появляется в консоли.

2   51   2013-04-12 05:06:51

2 ответа:

ваш синтаксис немного, он должен быть!--6-->

CollectionName.find({}, {fields: {'onlyThisField':1}});

или

CollectionName.find({}, {fields: {'everythingButThisField':0}});

ваш шаблон действительно контролирует, какие данные отображаются, но есть еще много сценариев, где ограничение полей имеет смысл-конфиденциальность данных или эффективность (некоторые поля всех записей, все поля "текущей" записи) являются двумя общими

вы не упомянули об этом, но это обычно находится в функции публикации-см. http://docs.meteor.com/#meteor_publish - элемент fields модификатор также доступен на клиенте, но там он не ограничивает данные, отправленные клиенту, просто на шаблон-уменьшение/выбор поля на стороне сервера имеет разные преимущества

--

дважды проверьте, что вы удалили autopublish пакет тоже, однако вы должны увидеть предупреждение, если у вас есть, что активный и написать свои собственные функции публикации, где вы бы чаще всего использовать fields

во-первых, если вы хотите управлять некоторых полей в Collection.find(),вы можете попробовать сделать это таким образом:

CollectionName.find({}, {fields: {field:1}});

но он работал только на сервере.

или попробуйте этот:

на сервере:

Meteor.publish("myCollection", function () {
    return SvseTree.find({},{fields: {field:1}});
});

на клиенте:

Meteor.subscribe("myCollection");

затем запустите meteor remove autopublish.

во-вторых, если вы хотите получить массив коллекции.найди (), попробуй это сделать: Коллекция.находить.)(fetch ();