Estoy tratando de hacer una consulta en MongoDB 3.4 donde agrego un campo para un elemento específico de una matriz. Ejemplo del objeto:
{ "_id": 1, "people": [ { "name": "Jhon Smith", "age": "30", "state": "NY" },{ "name": "Clint Mercer", "age": "50", "state": "NY" },{ "name": "Walter Smith", "age": "40", "state": "WI" } ] }Y quiero hacer una consulta donde agregaré a este documento un atributo con la primera persona con "Smith" en su nombre. Ejemplo:
{ "_id": 1, "people": [ { "name": "Jhon Smith", "age": "30", "state": "NY" },{ "name": "Clint Mercer", "age": "50", "state": "NY" },{ "name": "Walter Smith", "age": "40", "state": "WI" } ], "firstSmith": { "name": "Jhon Smith", "age": "30", "state": "NY" } }Ya tengo el _id del documento que quiero, pero no entiendo cómo hacer una consulta como esta. Estoy tratando de usar un agregado con "$match" para la identificación y "$addFields" después, pero no puedo hacer una consulta que funcione para este campo para encontrar exactamente lo que quiero. Creo que sería similar a la consulta "findOne", pero no puedo encontrar nada que funcione en "$addFields".
Obs: NO quiero que el "firstSmith" sea una matriz con solo una "gente" dentro, lo quiero como está en el ejemplo.
Agradecería algo de ayuda con esto.
$match - para filtrar el documento relevante$filter con $regexMatch : para filtrar la matriz de personas por la propiedad del nombrearrayElemAt - para obtener solo el primer elemento de la matriz anterior$addFields : para agregar un nuevo campo con el valor del resultado anterior db.collection.aggregate([ { "$match": { "_id": 1 } }, { "$addFields": { "firstSmith": { "$arrayElemAt": [ { "$filter": { "input": "$people", "cond": { "$regexMatch": { "input": "$$this.name", "regex": "Smith" } } } }, 0 ] } } } ])