tengo este esquema:
article: {
subject,
comments: []
}
si tengo 8 comentarios y consulta
article.find({}, {
comments: {
$slice: [ -10, 5 ]
}
});
Y consigo los comentarios de índice 0 para indexar 4,
pero solo quiero que se devuelvan los comentarios del índice 0 al índice 2 debido a la paginación.
(página 1 $ slice [-5, 5] del índice 3 al índice 7, página 2 $ slice [-10, 5] del índice 0 al índice 2)
ahora tengo que pasar otro parámetro "lastId "para comparar cada comentario y eliminar ese" _id "<" lastId ", pero creo que es un poco hacky.
¿Alguien tiene una buena solución para esto?
los comentarios no son texto largo y gran cantidad, por lo que 16 MB por documento es suficiente. y lo que realmente me preocupa es la flexibilidad y la eficiencia. entonces, realmente es una mala forma de almacenar comentarios (o cualquier otra matriz unida) como documento incrustado, ¿verdad? – Kevin
Bueno, algún tipo de consultas son muy difíciles de hacer con documentos incrustados, como darme todos los comentarios de un usuario específico. Entonces, en general, este es un buen caso para la desnormalización. – christkv
Estoy de acuerdo. Pero también creo que incrustado o no depende de lo que necesita la aplicación, si no necesito comentarios de consulta por otros campos, sino solo por el artículo (en otras palabras, los comentarios siempre aparecen con el artículo), prefiero incrustar la matriz de comentarios en el documento del artículo. – Kevin