进入这个(稍微讨厌的问题)我正在尝试查找集合中的所有记录而不显示(或显示)特定字段(分数)。这只是一个例子而不反映我的实际代码,但问题总是可以重现的。我排除的字段非常大,我只是想生成一个可用记录菜单。
像
这样的命令 players.find({},{score:1})
players.find({},{score:0})
始终返回每个字段,而不是触发mongodb中的exclude / include。我什么都不担心,因为模板可能会控制哪些数据呈现给html?无论如何,仍然感觉数据被传输到客户端;并显示在控制台中。
答案 0 :(得分:97)
你的语法有点偏差,应该是
CollectionName.find({}, {fields: {'onlyThisField':1}});
或
CollectionName.find({}, {fields: {'everythingButThisField':0}});
您的模板确实控制了显示的数据,但仍有许多情况下字段限制是有意义的 - 数据隐私或效率(所有记录的某些字段,“当前”记录的所有字段)是两个常见的
你没有提到它,但这通常是在发布函数内 - 请参阅http://docs.meteor.com/#meteor_publish - 客户端上也可以使用fields
修饰符,但它不会限制发送到客户端的数据,只是模板 - 服务器端字段缩减/选择有不同的好处
-
仔细检查您是否也删除了autopublish
软件包,但是如果您具有该活动并且编写自己的发布函数,则会看到警告,这是您最常使用的fields
答案 1 :(得分:10)
首先,如果您想控制Collection.find()
中的某些字段,可以尝试这样做:
CollectionName.find({}, {fields: {field:1}});
但它只在服务器上运行。
或试试这个:
在服务器上:
Meteor.publish("myCollection", function () {
return SvseTree.find({},{fields: {field:1}});
});
在客户端:
Meteor.subscribe("myCollection");
然后运行meteor remove autopublish
。
其次,如果你想获得Collection of Collection.find(),请尝试这样做: Collection.find()取();