sql >> Base de Datos >  >> NoSQL >> MongoDB

Agregación de Mongo, proyecta un subcampo del primer elemento en la matriz

En caso de que esté usando al menos MongoDB v3.2, puede usar $arrayElemAt operador para eso. La siguiente consulta hace lo que quieres. Sin embargo, no devolverá ningún dato para la muestra que proporcionó porque el "Instructions.1": { $exists: true } el filtro elimina el documento de muestra.

db.getCollection('Orders').aggregate([{
    $match: {
        "Instructions.1": {
            $exists: true
        }
    }
}, {
    $project: { 
        "_id": 0, 
        "UserId": "$User.EntityId", 
        "ItemName": { $arrayElemAt: [ "$Items.Details.ItemName", 0 /* first item! */] }
    }
}])