Mongoose 在数据库中查找最后十个条目
Posted
技术标签:
【中文标题】Mongoose 在数据库中查找最后十个条目【英文标题】:Mongoose find last ten entries in database 【发布时间】:2013-05-19 05:10:07 【问题描述】:我正在制作一个简单的小型社交网络。我已经完成了所有的输入帖子、用户等。现在唯一的问题是它几乎只是一个聊天室。每当您在某人的页面上发布内容时,唯一可以查看它的人就是当时页面上的人。当您刷新时,所有帖子都消失了。这是发送帖子时我正在做的技术部分,以及我想要做的事情。
每当您发布帖子时,它都会做一些不重要的事情,我不会列出它们。但是有一个部分很重要,将其发送到 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”?
先谢谢了。如果您需要任何代码,请告诉我。如果有任何不清楚的地方,请告诉我。
【问题讨论】:
【参考方案1】:在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");
);
【讨论】:
谢谢,我现在就补充! 好的,还有一个问题。我这样做了,所有更新都发送了,一切都很好,只是它似乎没有排序。 .sort('-date') 和 .sort('date') 或根本没有 .sort 给出相同的结果。你能解释一下吗? @Beaurocks16 您是否在架构和Post
文档中定义了 date
字段,其中包含您要排序的每个文档的日期?
@Beaurocks16 然后对其进行排序不会很好地工作。 :) 您要么需要添加和填充该字段,要么按 _id
排序,如果它的创建时间近似值符合您的目的。
这对我有帮助!泰!以上是关于Mongoose 在数据库中查找最后十个条目的主要内容,如果未能解决你的问题,请参考以下文章
Mongoose:在集合中查找用户并检查该用户的数组是不是包含 x?