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