Eri*_*Lee 9 performance database-connection subscriptions meteor
我有一些代码如下所示.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});
});
});
Run Code Online (Sandbox Code Playgroud)
Dat*_*sik 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});
});
Run Code Online (Sandbox Code Playgroud)
因此,不是调用.count()而是调用,.fetch()它会从您的集合中返回所选的25个条目,然后调用.length它,您将看到返回了正确的条目数.
我实际上打开了一个关于.count()的问题,因为在正常的Mongo中你可以做到:.count({'applySkipLimit': true});这将考虑到你的跳过和你的限制.
无论如何,这是你的问题.