Mongoose在数据库中找到最后十个条目

Bea*_*s16 6 mongoose mongodb node.js socket.io

我正在制作一个简单的小社交网络.我已完成所有输入帖子,用户等.现在唯一不对的是它几乎只是一个聊天室.每当您在某人的页面上发布内容时,唯一可以查看该内容的人就是当时页面上的人.刷新时,所有帖子都消失了.以下是发送帖子时我正在做的技术部分,以及我想要做的事情.

每当你发帖子时,它会做一些不重要的事情,我不会列出它们.但有一个重要部分,将其发送到NodeJS服务器.这是它使用的代码:

function sendPost(cont) {
    socket.emit("newPost", username, uid, cont, page);
    model.posts.unshift(new Post(username, uid, cont, page)); // You don't need to worry about this
}
Run Code Online (Sandbox Code Playgroud)

如您所见,它会使用用户名,uid,内容和页面发出"newPost".在服务器上,它接收带有此的帖子,然后插入到数据库中.

socket.on("newPost", function (name, id, cont, page) {
    var thePost = new Post({name: name, cont: cont, id: id, page: page});
    console.log("Received a new post by "+thePost.name+"(ID of "+thePost.id+"), with the content of \""+thePost.cont+"\", on the page "+thePost.page);
    socket.broadcast.emit("Post", name, id, cont, page);
    console.log("Post sent!");
    console.log("Putting post in database...");
    thePost.save(function (err, thePost) {
        if (err) {
            console.log("Error inserting into database: "+err);
        } else {
            console.log("Put into database finished!");
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

现在我的实际问题/问题.每当页面加载时,它都会向服务器发送一个请求,如下所示:

socket.emit("getPrevious", curPage, amount);
Run Code Online (Sandbox Code Playgroud)

这一切都很好.在服务器上,它接收并执行以下操作:

socket.on("getPrevious", function(curPage, amount) {
    console.log("Someone requested a page update, sending it to them...");
    Post.find({'page': curPage}).sort('-date').execFind(function(err, post){
        console.log("Emitting Update...");
        socket.emit("Update", post.name, post.id, post.cont);       
        console.log("Update Emmited");
    });
});
Run Code Online (Sandbox Code Playgroud)

该代码只能找到该页面上的最新帖子之一.我想让它找到最后的帖子,然后发回去.即使只发生一次,当我进入页面时,它会显示:

null says
Run Code Online (Sandbox Code Playgroud)

我的两个问题是这样的:如何让它找到最新的帖子,以及为什么只有这一个,它会返回"null"?

谢谢它提前.如果您需要任何代码,请告诉我.如果有什么不清楚,请告诉我.

Joh*_*yHK 12

execFind回调中,post参数是一个帖子数组,而不仅仅是一个.这就是为什么null says当你尝试将它作为一个帖子来对待时.

此外,如果您只想要最近的10个,则可以limit(10)在查询链中调用.您可能也应该使用exec而不是execFind更清楚一点.

所以类似于:

Post.find({'page': curPage}).sort('-date').limit(10).exec(function(err, posts){
    console.log("Emitting Update...");
    socket.emit("Update", posts.length);       
    console.log("Update Emmited");
});
Run Code Online (Sandbox Code Playgroud)