2015-10-13 116 views
0

我有這樣的代碼AngularJS流星蒙戈集合鍵值

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

這是一個錯誤?或者編碼不好...

+0

嘗試投影字段爲'var projection = {name:1,_id:0}; return AllClients.find({},{fields:projection});' – chridam

+1

正如@chridam指出的那樣,您需要提供[字段說明符](http://docs.meteor.com/#/full/fieldspecifiers) ,而不僅僅是田野。你的代碼應該是find({},{fields:{/ * your fields * /}})'。 –

+0

試過這個,但我得到一個遊標錯誤.... – locksalt

回答

0

首先,如果您不想在客戶端提供其他信息位,那麼您需要在服務器端完成這項工作。這是使用發佈方法處理的。

所有之前,刪除自動發佈:

> 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,並且不具有所有信息,因爲服務器不允許它。