I documenti MongoDB spiega come selezionare un sottointervallo di un elemento dell'array.
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
Puoi utilizzare questa tecnica per selezionare solo i messaggi rilevanti per la tua interfaccia utente. Tuttavia, non sono sicuro che questo sia un buon progetto di schema. Potresti prendere in considerazione la possibilità di separare i messaggi "visibili" dai messaggi "archiviati". Potrebbe rendere l'interrogazione un po' più semplice/veloce.