我有一些代码,如下所示。 Mongo中我的关键字集合中有大约60K条目。我真的只想要前25名,所以我试图设置限制查找。我正在运行相同的查询来打印出我的结果数量。出于某种原因,限制似乎不起作用,因为我的日志消息显示为60K左右。
这种事情不可能吗?我可以设置一个有效的客户端限制,但我想我会尝试限制服务器上的内容,以便减少发送的数据。
一些额外的信息:
非常感谢任何帮助。
if (Meteor.isServer) {
Meteor.startup(function() {
console.log('server startup');
Meteor.publish("keyword_hits", function() {
console.log('keywords: ' + Keywords.find({}, {sort: {count:-1}, limit:25}).count());
return Keywords.find({}, {sort: {count:-1}, limit:25});
});
});
答案 0 :(得分:16)
使用Meteor附带的Mongo API,.count()
不会考虑Limits
或Skips
,因此您所看到的将始终是最大金额你收藏的东西。
如果你这样做
Meteor.publish("keyword_hits", function() {
console.log('keywords: ' + Keywords.find({}, {sort: {count:-1}, limit:25}).fetch().length);
return Keywords.find({}, {sort: {count:-1}, limit:25});
});
所以不是打电话给.count()
而是打电话,.fetch()
会从您的收藏集中返回所选的25个条目,然后在其上调用.length
,您会看到正确的条目数被退回了。
我实际上打开了一个关于.count()的问题,因为在正常的Mongo中你可以这样做:.count({'applySkipLimit': true});
这将考虑到你的跳过和你的限制。
无论如何,那是你的问题。