" sort()"流星站点地图生成器方法中的错误

时间:2015-10-17 04:38:38

标签: node.js mongodb meteor sitemap

我使用meteor sitemaps包使用以下代码生成站点地图:

Meteor.methods({
    sitemapsGenerator: function (generateAnyway) {
        var setting = Settings.findOne({ title: 'sitemapsLastGenerateDate'});

        if (generateAnyway || (new Date(setting.lastModified.getTime()+(24*60*60*1000)) < new Date)) {
            console.log("sitemap generator called");
            var generalSitemapUrls = [];
            for (var i = 0; i <= Math.round(MyPosts.find().count() / 10000); i++) {
                sitemaps.add('/sitemap' + i + '.xml', (function (i) {
                    var out = [];
                    MyPosts.find({}, {
                        fields: {title: 1, postDate: 1},
                        sort: {postDate: 1}, limit: 10000, skip: i * 10000
                    }).forEach(function (post) {
                        console.log("sitemap called" + i);
                        out.push({
                            page: "/posts/" + post.title + "/" + post._id,
                            lastmod: post.postDate,
                            changefreq: 'weekly'
                        });
                    });
                    return out;
                })(i));
            }

            Settings.update({title: "sitemapsLastGenerateDate"}, {$set: {lastModified: new Date} });
        }
    }
});

2个月后,我的收藏规模在不断增长,最近我在尝试生成网站地图时遇到了以下错误:

MongoError: too much data for sort() with no index.  add an index or
specify a smaller limit.

解决此错误的解决方案是什么?

如果通过向集合字段添加索引来修复此错误,如何在meteor中执行此操作?

1 个答案:

答案 0 :(得分:1)

在您的集合对象上使用ensureIndex。通常,您在启动时在服务器端执行此操作。