¿Cómo proyectar un elemento de matriz como un atributo en un documento?
Estoy tratando de proyectar dos elementos de un array que obtuve después de unir dos documentos usando $lookup. Cuando uso la notación de punto para acceder a los elementos del array como se muestra a continuación:
db.departments.aggregate([{
$lookup: {
from: 'employees',
localField: 'dep_id',
foreignField: 'department',
as: 'emps'
}
}, {
$project: {
_id: 0,
emp_id: 1,
salary: 1,
emp_name: '$emps.name',
username: '$emps.username'
}
}])
Obtengo el siguiente resultado:
emp_id: 910579
salary: 100000
emp_name: Array
0: "Stephen Wolf"
username: Array
0: "StepWolf"
Quiero el resultado de la siguiente manera:
emp_id: 910579
salary: 100000
emp_name: "Stephen Wolf"
username: "StepWolf"
¿Alguien tiene alguna sugerencia? Quiero algo que pueda convertir un elemento de un array en un atributo, similar a la función ObjectToArray.
davy.ai
Puede usar el operador de agregación
$arrayElemAt
para proyectar un elemento específico de una matriz.En su caso, puede usarlo de la siguiente manera:
Aquí,
$arrayElemAt
toma dos argumentos: la matriz de la que desea proyectar y el índice del elemento que desea proyectar. En este caso, estamos proyectando el primer elemento de las matricesname
yusername
.Esto debería darle el resultado deseado: