MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Agrégation Mongo, projette un sous-champ du premier élément du tableau

Si vous utilisez au moins MongoDB v3.2, vous pouvez utiliser le $arrayElemAt opérateur pour cela. La requête ci-dessous fait ce que vous voulez. Cependant, il ne renverra aucune donnée pour l'exemple que vous avez fourni car le "Instructions.1": { $exists: true } filtre supprime l'exemple de document.

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