Esta es la primera vez que uso la búsqueda elástica, así que tengan paciencia conmigo. Tengo dos esquemas, Esquema de ofertas y Esquema de comentarios de oferta, necesito buscar por título de oferta y tener cada resultado de oferta con sus comentarios.
Esquema de oferta :
{ title: { type: String, es_indexed: true, } }En el esquema de oferta anterior, no hay ningún campo para hacer referencia a los comentarios de la oferta.
Esquema de comentario de oferta :
{ offer: { type: Schema.Types.ObjectId, ref: 'Offer', es_indexed: true, }, comment: { type: String, es_indexed: true, } }En el esquema de comentario de oferta anterior, el campo de oferta hace referencia a la oferta a la que pertenece el comentario. La siguiente tubería de agregación se usa para lograr el resultado deseado a través del controlador mongodb.
Tubería de agregación de Mongodb realizada en la colección de ofertas :
[ { $lookup: { from: 'offercomments', let: { id: '$_id', }, pipeline: [ { $match: { $expr: { $and: [ { $eq: ['$offer', '$$id'], }, ], }, }, }, { $sort: { createdAt: -1, }, }, { $limit: 1, }, ], as: 'comments', }, }, ];aquí hay algunas muestras de salida de la canalización de agregación
Muestra de salida de agregación :
[ { "_id": "123", "title": "offer title sample", "comments": [ { "_id": "_123", "offer": "123", "comment": "Hello there" } ] }, { "_id": "456", "title": "offer title sample", "comments": [ { "_id": "_456", "offer": "456", "comment": "Hello there" } ] } ]