Tengo un documento almacenado en MongoDB:
{ "id": 1, "op": "someone", "title": "some title", "category": 1, "conversation": { "1": { "user": 2, "comment": "some comment" }, "2": { "user": 9, "comment": "comment 2" }, ...... "26": { "user": 5, "comment": "comment 26" } } }Quiero obtener esto a pedido: (por ejemplo, POST {"id": 1, "página": 2})
{ "id": 1, "op": "someone", "title": "some title", "category": 1, "conversation": { "11": { "user": 10, "comment": "comment 11" }, ...... "20": { "user": 25, "comment": "comment 25" } } }es decir, 10 comentarios a partir del 11, es decir
página 1: devolver comentarios 1 - 10,
página 2: devolver comentarios 11 - 20,
......
página 10: devolver comentarios 91 - 100
Estoy usando NodeJS. Dado que procesar esto en el nodo puede consumir mucha memoria. Me gustaría hacer esto en Mongo.
Puede usar la canalización de agregación de Mongo para remodelar documentos de forma eficaz.
Parece que la etapa $redact haría lo que desea: hay un ejemplo muy similar en el sitio de MongoDB donde quieren recuperar elementos específicos de matrices dentro de documentos.
Para realizar ese proceso en el lado de MongoDB, puede usar la función skip () y limit ()
const document_by_page = 10; const page = 1; db.collection.find().skip(page * document_by_page).limit(document_by_page);Con la nueva información de sus comentarios, debe usar mongo db pipeline para procesar información en el lado de MongoDB. Eche un vistazo a https://docs.mongodb.com/manual/reference/operator/aggregation/filter/#mongodb-expression-exp.-filter .
Que tengas un buen día para encontrar tu solución