Подтвердить что ты не робот

Meteor - collection.find() всегда возвращает все поля

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

Команды вроде

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

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

4b9b3361

Ответ 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;
    }