Вы можете использовать оператор $arrayElemAt
, новый в MongoDB 3.2, чтобы вернуть элемент с указанным индексом массива.
Демонстрация:
Коллекцияnamed baskets содержит документы, которые выглядят следующим образом:
{
"_id" : ObjectId("578f326f6db61a299a383c5a"),
"fruits" : [
"apple",
"mango",
"banana",
"apricot",
"cherry"
]
}
Следующий запрос возвращает элемент с индексом -2
(второй элемент) в массиве "fruits".
db.baskets.aggregate(
[
{ "$project": { "matched": { "$arrayElemAt": [ "$fruits", 1 ] } } }
]
)
, который производит
{
"_id" : ObjectId("578f326f6db61a299a383c5a"),
"matched" : "mango"
}
И следующий запрос элемента перед последним элементом в массиве;таким образом, элемент с индексом -2
db.baskets.aggregate(
[
{ "$project": { "matched": { "$arrayElemAt": [ "$fruits", -2 ] } } }
]
)
, который дает:
{
"_id" : ObjectId("578f326f6db61a299a383c5a"),
"matched" : "apricot"
}