Meteor - collection.find()始终返回所有字段

red*_*000 52 mongodb node.js meteor

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

像这样的命令

    players.find({},{score:1})
    players.find({},{score:0})
Run Code Online (Sandbox Code Playgroud)

始终返回每个字段,而不是触发mongodb中的exclude/include.我什么都不担心,因为模板可能会控制哪些数据呈现给html?无论如何,仍然感觉数据被传输到客户端; 并显示在控制台中.

nat*_*ser 98

你的语法有点偏,它应该是

CollectionName.find({}, {fields: {'onlyThisField':1}});
Run Code Online (Sandbox Code Playgroud)

要么

CollectionName.find({}, {fields: {'everythingButThisField':0}});
Run Code Online (Sandbox Code Playgroud)

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

你没有提到它,但这通常是在发布函数内 - 请参阅http://docs.meteor.com/#meteor_publish - fields修改器也可以在客户端上使用,但它不会限制发送到客户端的数据,只是到模板 - 服务器端字段缩减/选择有不同的好处

-

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

  • 注意:Minimongo现在支持客户端使用`fields`.https://docs.meteor.com/#/full/find (4认同)

L.T*_*L.T 10

首先,如果要控制某些字段Collection.find(),可以尝试这样做:

CollectionName.find({}, {fields: {field:1}});
Run Code Online (Sandbox Code Playgroud)

但它只在服务器上工作.

或试试这个:

在服务器上:

Meteor.publish("myCollection", function () {
    return SvseTree.find({},{fields: {field:1}});
});
Run Code Online (Sandbox Code Playgroud)

在客户端:

Meteor.subscribe("myCollection");
Run Code Online (Sandbox Code Playgroud)

然后运行meteor remove autopublish.

其次,如果你想获得Array of Collection.find(),请尝试这样做:Collection.find().fetch();