53

遇到这个(有点烦人的问题)我正在尝试查找集合中的所有记录,而不是显示(或显示)特定字段(分数)。这只是一个示例,并不反映我的实际代码,但问题总是可以重现的。我排除的字段非常大,我只是想生成一个可用记录的菜单。

类似的命令

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

始终返回每个字段,而不是触发 mongodb 中的排除/包含。我什么都不担心,因为模板可能可以控制将哪些数据呈现为 html?仍然感觉数据无论如何都传输到了客户端;并出现在控制台中。

4

2 回答 2

102

你的语法有点不对劲,应该是

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

或者

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

您的模板确实控制了显示哪些数据,但仍有许多情况下字段限制是有意义的 - 数据隐私或效率(所有记录的某些字段,“当前”记录的所有字段)是两个常见的

你没有提到它,但这通常是在发布功能中 - 见http://docs.meteor.com/#meteor_publish -fields客户端也可以使用修饰符,但它不限制发送到客户端的数据,只是到模板 - 服务器端字段减少/选择有不同的好处

--

仔细检查您是否也删除了该autopublish软件包,但是如果您有该软件包并编写自己的发布功能,您应该会看到一个警告,这是您最常使用的地方fields

于 2013-04-12T01:20:41.917 回答
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.find() 的数组,请尝试这样做:Collection.find().fetch();

于 2013-04-12T03:56:29.710 回答