如何查询mongoose数据库来检索一个项目?

时间:2018-04-01 18:15:40

标签: javascript arrays node.js mongoose ejs

我需要有人来帮助我,所以我的数据库中每个类别都有几篇博文,但我只想在索引视图中显示每个类别的一篇博文(我使用的是ejs) ,我该怎么做?我是node.js和mongoose的新手。请帮助一个兄弟。谢谢!

我在下面发布了我的app.js和index.ejs文件。

app.get("/index", function(req, res, next){
        output = {
        sports: [],
        fashion: [],
        food: [],
        headlines: [],
    };
        async.parallel([
            function(cb){
                Blog.find({"category": "sports"}).sort({"created": -1}).exec(function(err, sportsBlogs){
                    if (err){
                        console.log(err);                
                } else {
                    output.sport = sportsBlogs;
                    cb(null, sportsBlogs);
                }
                });
            },
            function(cb) {
                Blog.find({"category": "fashion"}).sort({"created": -1}).exec(function(err, fashionBlogs){
                    if (err){
                        console.log(err);                
                } else {
                    output.fashion = fashionBlogs;
                    cb(null, fashionBlogs);
                }
                });
            },
            function(cb) {
                Blog.find({"category": "food"}).sort({"created": -1}).exec(function(err, foodBlogs){
                    if (err){
                        console.log(err);                
                } else {
                    output.food = foodBlogs;
                    cb(null, foodBlogs);
                }
                });
            },

            function(cb) {
                Blog.find({"category": "headlines"}).sort({"created": -1}).exec(function(err, headlinesBlogs){
                    if (err){
                        console.log(err);                
                } else {
                    output.headlines = headlinesBlogs;
                    cb(null, headlinesBlogs);
                }
                });
            }
            ], function(err, results){
            res.render("index", {
                sportsBlogs: output.sports,
                fashionBlogs: output.fashion,
                foodBlogs: output.food,
                headlinesBlogs: output.headlines
            });
        });
    });


    <% headlinesBlogs.forEach(function(blog){ %> 
        <div class="col span-2-of-3 headlines-story-container">
            <img class="headline-image" src="<%= blog.storyImage %>">        
            <p class="hs-category"><a href="/index"><%=blog.category%></a></p>        
            <h3 class="hs-title"><a href="/index"><%=blog.title%></a></h3>
            <p class="hs-story-intro"><%= blog.body.substring(0, 200) %>... <a href="/index/<%= blog._id %>">Continue Reading</a></p>        

            <div class="col span-1-of-2 hs-author-box">
                <a href="/"><img src="<%=blog.authorImage %>"></a>
            </div>

             <div class="col span-1-of-2 hs-author-text">
                <h5 class="hs-author"><a href="/index">By <%=blog.author%></a></h5>
            </div>             

        </div>
    <% }); %>

1 个答案:

答案 0 :(得分:0)

仅获取一篇博文,使用<stx-action-create disabled="isEnabled()"></stx-action-create> 代替.findOne(),因为它返回.find()而不是Object Array,{ {1}}无效。

所以用Objects替换.forEach()并删除Blog.find()行:

Blog.findOne()

和最后一个.forEach()

并直接使用<% headlinesBlogs.forEach(function(blog){ %>

<% }); %>

您应该考虑将变量重命名为单数并删除headLineBlogs,因为它是一个帖子。