Supuestamente, quiero obtener un objeto de mi colección, y a este objeto, quiero agregar una propiedad que almacenará una matriz de objetos que contengan identificadores y títulos que coincidan con una de las propiedades de mi objeto (en mi serie de casos).
Ejemplo Tengo este objeto como resultado de mi consulta inicial
{ _id: 13123123123, title: "TitleofObject", series: "SeriesName", }
luego quiero buscar en la misma colección donde el nombre de la serie es el mismo para mi objeto (agregue una nueva propiedad llamada sameSeries para almacenar objetos que coincidan con la serie) y el resultado final del objeto debería verse así
_id: 13123123123, title: "TitleofObject", series: "SeriesName", sameSeries: [ { _id: 12312312, title: "anothertitleofObject" }, { _id: 12312342312, title: "anothertitleofObject2" } ]
¿Cómo puedo lograr esto usando el método agregado?
const book = await Book.aggregate([ { $match: { _id: id } }, ])
db.collection.aggregate([ { "$group": { //Group by series "_id": "$series", "sameSeries": { //Create an object $push: { //push the required fields "title": "$title", "_id": "$_id" } } } } ])
db.collection.aggregate([ { "$match": { "_id": 13123123123, "sameSeries": { "$exists": false } } }, { "$lookup": { "from": "collection", "localField": "series", "foreignField": "series", "as": "sameSeries" } } ])
Para omitir la identificación de los padres, puede hacer una porción
db.collection.aggregate([ { "$match": { "_id": 13123123123, } }, { "$lookup": { "from": "collection", "localField": "series", "foreignField": "series", "as": "sameSeries" } }, { "$project": { _id: 1, series: 1, title: 1, sameSeries: { "$slice": [ "$sameSeries", -1 ] } } } ])