【问题标题】:AngularJS meteor mongo collection key valueAngularJS流星mongo集合键值
【发布时间】:2016-01-11 10:18:47
【问题描述】:

我有这个代码

$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"
}

这是一个错误吗?或者糟糕的编码......

【问题讨论】:

  • 尝试将字段投影为var projection = { name: 1, _id: 0 }; return AllClients.find({},{fields: projection});
  • 正如@chridam 所指出的,您需要提供field specifier,而不仅仅是字段。你的代码应该是find({}, { fields : {/* your fields*/}})
  • 试过这个,但我得到一个光标错误....
  • 如果我没记错的话,你总会得到_id。 .find({},{ fields: {name:1} })

标签: javascript mongodb meteor angular-meteor meteor-collections


【解决方案1】:

首先,如果您不希望在客户端获得其他信息,那么您需要在服务器端完成工作。这是使用发布方法处理的。

首先,删除自动发布:

> meteor remove autopublish

然后你可以在你的服务器文件夹中创建发布方法:

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

这个发布方法会找到所有的客户端并且只允许name字段,记住你可能仍然会得到_id字段,我相信它总是被发送的。

然后在您的客户端,您需要订阅它:

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

使用meteor,当您从客户端访问信息时,您只有可以访问服务器允许您访问的内容。在这种情况下,您可以请求 AllCients 并且不拥有所有信息,因为服务器不允许这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-28
    • 2013-01-02
    • 2016-05-15
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多