siguiente problema, en mi aplicación tengo publicaciones y cada publicación puede tener una variedad de comentarios. Estoy tratando de ordenar los comentarios por su fecha. Ya busqué y probé alguna de las soluciones, pero ninguna me funcionó.
Mis intentos no funcionan:
const post = await Post.findById(id) .populate({ path: 'comments', options: { sort: { createdAt: -1 } }, }) const post = await Post.findById(id) .sort({ 'comments.createdAt': -1 })En mi modelo de publicación si hace referencia al modelo de comentarios como sigue:
ESQUEMA DE COMENTARIO
{ comment: { type: String, required: true }, user: { type: mongoose.Schema.Types.ObjectId, required: true, ref: 'User', }, }, { timestamps: true } )POSTE MODELO:
const postSchema = mongoose.Schema( { user: { type: mongoose.Schema.Types.ObjectId, required: true, ref: 'User', }, image: { type: String, }, text: { type: String, required: true, }, workout: { type: mongoose.Schema.Types.ObjectId, ref: 'Workout', }, comments: [commentSchema], numComments: { type: Number, required: true, default: 0, }, likes: [likeSchema], numLikes: { type: Number, required: true, default: 0, }, }, { timestamps: true, } )Gracias por cualquier ayuda por adelantado.
La pregunta es dónde desea que suceda la ordenación, para ordenarla en el lado del cliente, la solución más fácil será ordenar los comments de la matriz, ya que no está haciendo referencia a otro documento de esquema con ref , no es necesario populate (búsqueda), simplemente escriba otro then funciona así:
const post = await Post.findById(p._id).then(result => { result.comments.sort((a, b) => a.createdAt > b.createdAt ? -1 : 1); return result; })Para ordenar mientras se recupera, debe usar la función de modelo agregado y usar el patrón de etapas de canalización: $coincidir, $desenrollar, $ordenar, $agrupar. Pero es un camino complicado.