簡體   English   中英

Mongodb:最后N條記錄,跳過集合大小-30?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM