Q:

Can we set a new key equal to an array element in $project statement?

In mongo, I can do this:
db.HI.aggregate({$project: {new_val: '$tags.first'}})

However, this doesn't work:
db.HI.aggregate({$project: {new_val: '$my_array.0'}})

Does it mean that aggregation doesn't support array in this way? Is there any alternative?

A:

Presently the aggregation framework doesn't yet support this, there's an in progress JIRA ticket for this here and there. 
An alternative is to first $unwind the array, then $group the deconstructed array documents by the _id key. In the grouped documents, retrieve the first array element with the $first group accumulator operator:
db.HI.aggregate([
    { 
        "$unwind": "$my_array" 
    },
    { 
        "$group": {
            "_id": "$_id",
            "new_val": { "$first": "$my_array" }
        }
    }
])

