简单:
models.Message.find({ chat_id: req.params.chat_id }).skip(80).limit(30).sort({sent:1}).exec(function(err, message) {
if(err) {
res.json({error: 'Message not found.'});
} else {
res.json(message);
}
});
如何编写skip()
以跳过整个集合减去最后30集,使其动态化?
详情:
我需要这样做的原因是因为它是一个聊天应用程序,并且消息需要返回最旧到最新的sort({sent:1})
但是集合可以变大,我只想发送30个文档。
所以例如
[
{sent: 1, message:'hey'},
{sent: 2, message:'sup'},
{sent: 3, message:'nttn much'}
]
对于这个例子,我想向客户端发送1条消息,静态地看起来像这样。
models.Message.find({ chat_id: req.params.chat_id }).skip(2).limit(1).sort({sent:1}).exec(function(err, message) {
if(err) {
res.json({error: 'Message not found.'});
} else {
res.json(message);
}
});
这将返回最新的{sent: 3, message:'nttn much'}
,这很好。
但没有跳过方法,它看起来像这样
models.Message.find({ chat_id: req.params.chat_id }).limit(1).sort({sent:1}).exec(function(err, message) {
if(err) {
res.json({error: 'Message not found.'});
} else {
res.json(message);
}
});
将此内容返回给客户{sent: 1, message:'hey'}
,不太好。
所以显然我需要跳过,我需要在mongoDB文档上进行更多搜索,但必须有一种方法来检查收集长度然后减去x
或者在这种情况下大约30,然后通过进入skip()
?
知道我是怎么做到的吗?
答案 0 :(得分:0)
您可以使用skip(80).limit(30).sort({sent:-1})
获取最近30个文档,然后在您的客户端应用中按照您想要的方式对其进行排序。
答案 1 :(得分:0)
所以我意识到在执行res.json
并发送到客户端之前查询数据库后我可以使用该对象。这就是我想出来的,现在似乎有效。
getById: function(req, res) {
if (req.user) {
models.Message.find({ chat_id: req.params.chat_id }).sort({sent:1}).exec(function(err, message) {
if(err) {
res.json({error: 'Message not found.'});
} else {
console.log(message.length);
message = message.slice(message.length - 30);
console.log(message);
res.json(message);
}
});
}
},