2013-04-12 23 views
50

跑进这个(稍微烦人的问题)我试图查找集合中的所有记录,而不是显示(或显示)特定字段(分数)。这只是一个例子,并不反映我的实际代码,但问题始终是可重现的。我排除的字段非常大,我只是试图生成可用记录的菜单。流星 - collection.find()总是返回所有字段

命令状

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

务必将每一个领域,而不是触发排除/包含在MongoDB中。我是否担心什么,因为模板可能可以控制什么数据呈现为HTML?无论如何,仍感觉数据传输到客户端;并在控制台中显示。

+2

您的语法错误,因为您认为Mongo语法将直接适用于Meteor。 – Saad

回答

93

你的语法是关闭了一下,应该是

CollectionName.find({}, {fields: {'onlyThisField':1}}); 

CollectionName.find({}, {fields: {'everythingButThisField':0}}); 

模板确实控制数据显示的内容,但还是有很多场景中电场限制是有道理的 - 数据或效率的隐私(所有记录的某些字段,“当前”记录的所有字段)是两个常见的字段

您没有提及它,但通常是在发布功能 - 参见http://docs.meteor.com/#meteor_publish - fields修改器也可在客户端上使用,但它不限制发送到客户端的数据,仅限于模板 - 服务器端字段缩减/选择具有不同的优点

-

仔细检查您已经删除了autopublish包过,不过你应该会看到一个警告,如果你有一个积极的,写自己的发布功能,这是您将最常使用fields

+1

这没有奏效..你错过了我的观点,无论我如何构建mongo查询,包括一个字段,或排除每个字段都没有关系;它总是返回相同的结果;每个字段。 – redcap3000

+1

你在客户端代码中使用了这个吗?它只适用于服务器。如果你可以把代码放在一起,它会更有帮助,因为如果你已经解决了这个问题中的所有问题,就很难重现它。 – Akshat

+0

客户端有没有这样的东西? –

10

首先,如果你想控制Collection.find()中的一些字段,你可以尝试这样做:

CollectionName.find({}, {fields: {field:1}}); 

但它只在服务器上工作。

或者试试这个:

在服务器上:

Meteor.publish("myCollection", function() { 
    return SvseTree.find({},{fields: {field:1}}); 
}); 

在客户端:

Meteor.subscribe("myCollection"); 

然后运行meteor remove autopublish。第二,如果你想获得Array.find()的数组,试着去做: Collection.find()。fetch();

+0

那么,现在有没有办法限制客户端的字段? – Hamal000

+0

@ Hamal000 http://docs.meteor.com/#find –