Os documentos do MongoDB explicar como selecionar um subintervalo de um elemento de matriz.
db.dialogs.find({"_id": [dialogId]}, {msgs:{$slice: 5}}) // first 5 comments
db.dialogs.find({"_id": [dialogId]}, {msgs:{$slice: -5}}) // last 5 comments
db.dialogs.find({"_id": [dialogId]}, {msgs:{$slice: [20, 10]}}) // skip 20, limit 10
db.dialogs.find({"_id": [dialogId]}, {msgs:{$slice: [-20, 10]}}) // 20 from end, limit 10
Você pode usar essa técnica para selecionar apenas as mensagens relevantes para sua interface do usuário. No entanto, não tenho certeza de que este seja um bom design de esquema. Você pode considerar separar as mensagens "visíveis" das mensagens "arquivadas". Pode tornar a consulta um pouco mais fácil/rápida.