[英]Mongodb: last N records, skip collection size - 30?
簡單:
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'}
,這很好。
但是如果沒有skip方法,它將看起來像這樣
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()
?
知道我該怎么做嗎?
您可以使用skip(80).limit(30).sort({sent:-1})
來獲取最后30個文檔,然后在您的客戶端應用中以所需的方式對其進行排序。
因此,我意識到在查詢res.json
之后,可以在執行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);
}
});
}
},
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.