如何查询猫鼬数据库以检索一项?

Posted

技术标签:

【中文标题】如何查询猫鼬数据库以检索一项?【英文标题】:How to query a mongoose database to retrieve one item? 【发布时间】:2018-09-11 01:45:44 【问题描述】:

我需要有人帮我解决这个问题,所以我的数据库中每个类别都有几篇博文,但我只想在我的索引视图上显示每个类别的一篇博文(我正在使用 ejs) ,我该如何实现呢?我是 node.js 和猫鼬的新手。请大哥帮忙。谢谢!

我在下面发布了我的 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>
    <% ); %>

【问题讨论】:

你试过Blog.findOne而不是Blog.find吗? @Taki - 感谢您的回复。我尝试使用 Blog.findOne 方法。但是当我尝试渲染视图时出现错误。我认为问题是我不能在我的 app.js 中使用 Blog.findOne ,然后在我的 index.ejs 文件中使用 。 【参考方案1】:

要仅获取一篇博文,请使用 .findOne() 而不是 .find() ,因为它返回 Object 而不是 ObjectsArray ,所以 .forEach() 将不起作用。

所以将Blog.find() 替换为Blog.findOne() 并删除.forEach() 行:

这个&lt;% headlinesBlogs.forEach(function(blog) %&gt;

最后一个&lt;% ); %&gt;

并像直接使用headLineBlogs一样

<p class="hs-category"><a href="/index"><%=headlinesBlogs.category%></a></p>        

您应该考虑将变量重命名为单数并删除 s,因为它是一篇文章。

【讨论】:

以上是关于如何查询猫鼬数据库以检索一项?的主要内容,如果未能解决你的问题,请参考以下文章

如何在猫鼬回调中读取查询?

重写查询以进行分页

不将数据从服务方法传递到猫鼬获取路由以使用 Angular IO 查询数据

数组中的猫鼬查询,用于检索从索引 0 到 n 开始的元素,其中 n 是从最后一个元素开始的位置

Mongoose - 查询以获取文档的所有子文档

如何以编程方式检索所有查询的查询文本