Meteor - collection.find() всегда возвращает все поля
Ran в эту (слегка раздражающую проблему). Я пытаюсь найти все записи в коллекции и не показывать (или показывать) конкретное поле (оценка). Это всего лишь пример и не отражает мой фактический код, но проблема всегда воспроизводима. Поля, которые я исключаю, очень большие, и я просто пытаюсь создать меню доступных записей.
Команды вроде
players.find({},{score:1})
players.find({},{score:0})
Всегда возвращайте каждое поле вместо запуска исключения /include в mongodb. Я ни о чем не беспокоюсь, так как шаблон потенциально может контролировать, какие данные передаются в html? По-прежнему кажется, что данные передаются на клиентскую сторону независимо; и отображается в консоли.
Ответы
Ответ 1
ваш синтаксис выключен, он должен быть
CollectionName.find({}, {fields: {'onlyThisField':1}});
или
CollectionName.find({}, {fields: {'everythingButThisField':0}});
ваш шаблон действительно контролирует, какие данные отображаются, но по-прежнему существует множество сценариев, где ограничение поля имеет смысл - конфиденциальность данных или эффективность (некоторые поля всех записей, все поля "текущей" записи) являются двумя общими
вы не упомянули об этом, но это обычно находится в функции публикации - см. http://docs.meteor.com/#meteor_publish - модификатор fields
также доступен на клиенте, но там он не ограничивает данные, отправленные клиенту, просто для уменьшения/выбора поля на стороне сервера - сервера имеет разные преимущества.
-
дважды проверьте, что вы также удалили пакет autopublish
, однако вы должны увидеть предупреждение, если у вас есть этот актив, и напишите свои собственные функции публикации, в которых вы чаще всего используете fields
Ответ 2
Во-первых, если вы хотите управлять некоторыми полями в Collection.find()
, вы можете попробовать сделать это следующим образом:
CollectionName.find({}, {fields: {field:1}});
но он работал только на сервере.
Или попробуйте следующее:
На сервере:
Meteor.publish("myCollection", function () {
return SvseTree.find({},{fields: {field:1}});
});
На клиенте:
Meteor.subscribe("myCollection");
затем запустите meteor remove autopublish
.
Во-вторых, если вы хотите получить Array из Collection.find(), попробуйте сделать это: Collection.find() выборки();.
Ответ 3
Метод Meteor Server используется для всей информации о пользователе, за исключением пользовательских сервисов (поскольку он включает в себя пароль пользователя)
"getUserInfo": function() {
let userInfo = Meteor.users.findOne(
{ _id: Meteor.userId() },
{ fields: { services: 0 } }
);
return userInfo;
}