javascript - 高效查找以前的帖子 (keystoneJS)

标签 javascript performance mongodb express keystonejs

我正在寻找上一篇文章。我知道我可以加载所有帖子并从那里检查..但这似乎数据量很大。有没有更干净的方法来查询上一篇文章?也许有排序?或者也许有一种方法可以限制检索的数据量..就像只限制数据量,以便减少数据量?

我只是想提出一个简单的请求并找到下一篇文章。

这是我当前的解决方案

var keystone = require('keystone');

exports = module.exports = function(req, res) {
    var view = new keystone.View(req, res),
        locals = res.locals;

    // Set locals
    locals.section = 'news';
    locals.filters = {
        post: req.params.post
    }
    locals.data = {
        previousPost: []
    }

    // Load the current post
    view.on('init', function(next) {

        var q = keystone.list('Post').model.findOne({
            state: 'published',
            slug: locals.filters.post
        }).populate('author categories');

        q.exec(function(err, result) {
            locals.data.post = result;
            next(err);
        });

    });

    // Load previous post
    view.on('init', function(next) {
        var q = keystone.list('Post').model.find().where('state', 'published').sort('-publishedDate');
        q.exec(function(err, results) {
            allPosts = results;
            for (var i = 0; i < allPosts.length; i++) {
                if (allPosts[i]["slug"] === locals.filters.post) {
                    locals.data.previousPost = allPosts[i+1];
                    next(err);
                }
            }
        });
    });

    // Render the view
    view.render('post');    
}

最佳答案

对应的mongo查询是: db.posts.find({state: "已发布",publishedDate: {$lt: currentpost.publishedDate}}).sort({publishedDate: -1}).limit(1)

我认为相应的 keystone/mongoose 查询是: var q = keystone.list('Post').model.find({state: "已发布",publishedDate: {$lt: currentpost.publishedDate}}).sort('-publishedDate').limit(1);

如果您只想选择帖子的标题,那么您可以添加选择查询过滤器: var q = keystone.list('Post').model.find({state: "已发布",publishedDate: {$lt: currentpost.publishedDate}}).sort('-publishedDate').select('title') .限制(1);

等效的 mongo 查询类似于: db.posts.find({state: "已发布",publishedDate: {$lt: currentpost.publishedDate}},{title: 1}).sort({publishedDate: -1}).limit(1)

还有其他不同的方式来编写这些查询:-)

关于javascript - 高效查找以前的帖子 (keystoneJS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35357829/

相关文章:

javascript - 如何在 for 循环中输出多维数组和一维数组

javascript - 为什么事件监听器中的 "this"是窗口而不是元素?

Javascript setInterval 性能因多个动画而下降

c# - 如何在 C# 中解析文本文件并进行 io 绑定(bind)?

node.js - Expressjs路由问题

javascript - 将 NODE_ENV 传递给 Angular

python - 提高读取二进制文件的速度

mongodb - 使用日期过滤器传递 Hadoop 作业的输入查询 (mongo.input.query)

javascript - 如何在strapi中为mongodb实现自增?

javascript - 有没有更简洁的方法来编写这个更改数组中项目的 reducer 函数?