Простой:Mongodb: последние N записей, пропустить размер коллекции - 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'}
, это хорошо.
НО без метода пропускаемого это будет выглядеть следующим образом
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()
?
Любая идея, как я это делаю?
Мне нравится, что и считал, но в то же время чувствую, что я хочу, чтобы справиться с этим все на стороне сервера, я понимая, что после запроса к БД 'message' является массивом объектов, так что я могу использовать ваниль JS для удаления объектов из массива объектов, затем 'res.json' новый массив объектов. Работая над этим сейчас. –