mongodb 使用mongoose通过createdAt在集合中选择3个最近创建的项目的问题

dced5bon  于 2023-04-20  发布在  Go
关注(0)|答案(1)|浏览(148)

我是非常新的编程,我试图选择,然后显示图像的3个最近创建的书籍在我的数据库,但当我排序的createdAt,图像将不再显示。
这是用于显示图像的ejs:

<% for(let r of recentBooks) { %>
                <img class="recentBooks cover" src=" <%= r.covers[0].url %>" alt="">
                <% } %>

这是显示图像的find版本,但不显示最近三本书的图像:

app.get('/', async (req, res) => {
    const recentBooks = await Book.find().limit(3);
    console.log(recentBooks);
    res.render("home", { recentBooks })
})

这是查找版本,给予我一个“无法读取未定义的属性(阅读'url')”错误:

app.get('/', async (req, res) => {
    const recentBooks = await Book.find().sort({ createdAt: -1 }).limit(3);
    console.log(recentBooks);
    res.render("home", { recentBooks })
})

为什么会发生这种情况,我能做些什么来修复它?谢谢

kmynzznz

kmynzznz1#

假设您已经在Mongoose中正确地设置了Book模型,并且已经将createdAt字段定义为Date类型,那么您的查询看起来很好。
您收到的错误"Cannot read properties of undefined (reading 'url')"表示covers数组为空或未定义,至少recentBooks数组中有一本书。
要解决这个问题,您可以添加一个检查,以确保在尝试访问url属性之前covers数组不为空。

<% for(let r of recentBooks) { %>
    <% if(r.covers && r.covers.length > 0) { %>
        <img class="recentBooks cover" src="<%= r.covers[0].url %>" alt="">
    <% } %>
<% } %>

相关问题