Meteor - collection.find() 总是返回所有字段

Posted

技术标签:

【中文标题】Meteor - collection.find() 总是返回所有字段【英文标题】:Meteor - collection.find() always returns all fields 【发布时间】:2013-04-04 09:30:33 【问题描述】:

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

类似的命令

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

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

【问题讨论】:

您的语法是错误的,因为您认为 Mongo 语法将直接适用于 Meteor。 【参考方案1】:

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

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

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

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

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

--

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

【讨论】:

那行不通..您没有理解我的意思,我如何构建 mongo 查询、包含一个字段或排除每个字段都没有关系;它总是返回相同的结果;每个字段。 你在客户端代码上使用这个吗?它只适用于服务器。如果您可以将代码放上去,它会有所帮助,因为如果您已经解决了此答案中的所有问题,则很难重现它。 客户端没有这样的东西吗? 客户端您可以在车把模板动作/函数或事件中修改 mongo 结果集。 CollectionName.find().fetch().filter(function(array,index)return new_array;); 注意:Minimongo 现在支持客户端使用fields。 docs.meteor.com/#/full/find【参考方案2】:

首先,如果你想控制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() 的数组,请尝试这样做: 集合.find().fetch();

【讨论】:

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

以上是关于Meteor - collection.find() 总是返回所有字段的主要内容,如果未能解决你的问题,请参考以下文章

mongodb ? db.collection.find() ???????

node.js 和 mongodb:async 的 await collection.find 与 collection.find.exec

Collection#find:改为传递函数

Collection.find() 仅适用于某些集合

方法 Illuminate\Support\Collection::find 不存在

如何在 MongoDB collection.find() 上获取回调