node.js - Mongoose 在数据库中查找最后十个条目

标签 node.js mongodb socket.io mongoose

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

每当您发布帖子时,它都会做一些不重要的事情,我不会列出它们。但是有一个部分很重要,将其发送到 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
}

如您所见,它发出一个带有用户名、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!");
        }
    });
});

现在我的实际问题/问题。每当页面加载时,它都会像这样向服务器发送请求:

socket.emit("getPrevious", curPage, amount);

一切正常。在服务器上,它接收到它并执行以下操作:

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");
    });
});

该代码只会找到该页面上的最新帖子之一。我希望它找到最后的帖子,然后将它们发回。即使它只发生一次,当我转到页面时,它也会显示:

null says

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

先谢谢了。如果您需要任何代码,请告诉我。如果有任何不清楚的地方,请告诉我。

最佳答案

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");
});

关于node.js - Mongoose 在数据库中查找最后十个条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16720745/

相关文章:

mongodb - 'this' 的外部值被此容器与 Mongoose Schema Typescript 遮蔽

javascript - socket.io - 引用错误 : io is not defined

node.js - 使用 GraphicsMagic Node 将 EPS 转换为 PNG 不会保持透明度

node.js - 错误 npm install 没有适用于 https-proxy-agent-snyk-fork 的有效版本

MongoDB - 按字段计数,并按计数排序

Mongodb 插入未成功完成(使用 node.js)

apache - 通过 Apache 服务页面访问 socket.io 服务器

javascript - webRTC HTML5 白板/视频聊天

javascript - 使用 lambda 修改值

node.js - 有没有办法像我们在bunyan CLI 中显示的那样显示winston 日志文件?