You can use an aggregation instead of findOne, performing a $match.
In Mongodb 3.2, there is $slice in aggregation, so you can $slice the item at position 1 and -1 :
db.my_collection.aggregate([{
$match: { my_query: 'is_awesome' }
}, {
$project: {
my_query: 1,
firstElement: { $slice: ["$big_array", 1] },
lastElement: { $slice: ["$big_array", -1] }
}
}])
In Mongodb < 3.2, $slice cant be used in aggregation, so you can use an $unwind and $group, the following is working in Mongodb 3.0 :
db.my_collection.aggregate([{
$match: { my_query: 'is_awesome' }
}, {
$unwind: "$big_array"
}, {
$group: {
_id: "$_id",
my_query: { $first: "$my_query" },
firstElement: { $first: "$big_array" },
lastElement: { $last: "$big_array" }
}
}])