Значение ключа коллекции метеоров AngularJS Mongo

у меня есть этот код

$scope.users = $meteor.collection( function() {
        return AllClients.find({}, {name: 1, _id: 0});
      });

Я ожидаю вернуть такое значение

/* 1 */
{
    "name" : "Samsung"
}

/* 2 */
{
    "name" : "HP"
}

но он все равно возвращает такое значение

/* 1 */
{
    "_id" : "SqFP23zTXo6MqDLxP",
    "code" : "A100",
    "name" : "Samsung",
    "address" : "Korea"
}

/* 2 */
{
    "_id" : "8QtNBoBGrvv5wWpuZ",
    "code" : "B100",
    "name" : "HP",
    "address" : "USA"
}

Это ошибка? Или плохой код...


person locksalt    schedule 13.10.2015    source источник
comment
Попробуйте проецировать поля как var projection = { name: 1, _id: 0 }; return AllClients.find({},{fields: projection});   -  person chridam    schedule 13.10.2015
comment
Как указал @chridam, вам нужно указать спецификатор поля, а не только поля. Ваш код должен быть find({}, { fields : {/* your fields*/}}).   -  person Kyll    schedule 13.10.2015
comment
Пробовал это, но я получаю сообщение об ошибке курсора....   -  person locksalt    schedule 15.10.2015
comment
Если я правильно помню, вы всегда получите обратно _id. .find({},{ fields: {name:1} })   -  person Tj Gienger    schedule 17.10.2015


Ответы (1)


Во-первых, если вы не хотите, чтобы другие биты информации были доступны на стороне клиента, вам нужно выполнить работу на стороне сервера. Это обрабатывается с помощью методов публикации.

Прежде всего, удалите автопубликацию:

> meteor remove autopublish

Затем вы можете создать метод публикации в папке вашего сервера:

Meteor.publish('clientNames', function() {
    return AllCients.find({}, {fields: {name: 1} });
});

Этот метод публикации найдет всех клиентов и разрешит только поле имени, имейте в виду, что вы все равно можете получить поле _id, я считаю, что оно всегда отправляется.

Затем на стороне клиента вам нужно будет подписаться на него:

$scope.$meteorSubscribe('clientNames').then(function() {
    $scope.users = $scope.$meteorCollection(AllClients, false);
});

С помощью метеора, когда вы получаете доступ к информации со стороны клиента, вы только имеете доступ к тому, что вам разрешил сервер. В этом случае вы можете запросить AllCients и не получить всю информацию, потому что сервер не разрешает это.

person Tj Gienger    schedule 23.10.2015