MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Aggregazione Mongo, proietta un sottocampo del primo elemento nell'array

Nel caso in cui utilizzi almeno MongoDB v3.2, puoi utilizzare $arrayElemAt operatore per quello. La query seguente fa quello che vuoi. Tuttavia, non restituirà alcun dato per il campione fornito perché "Instructions.1": { $exists: true } il filtro rimuove il documento di esempio.

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