あなたが探しているのは、$slice
プロジェクションです。
配列の先頭から要素数を取得する
返される値の数を単純$limit
に渡すことができます (例: 1):
> db.mycoll.find({}, {_id: 0, a: { $slice: 1}})
{ "a" : [ 4 ] }
{ "a" : [ 24 ] }
{ "a" : [ 4 ] }
{ "a" : [ 4 ] }
{ "a" : [ 2 ] }
{ "a" : [ 4 ] }
要素の範囲を取得する
$skip
( , )のパラメーターを持つ配列を渡すことができます$limit
。
注: 期待される出力に一致させるには、要素 3 から 5 を見つける必要があります (最初の 2 つの要素をスキップし、次の 3 を返します)。
> db.mycoll.find({}, {_id: 0, a: { $slice: [2,3]}})
{ "a" : [ 8, 71, 21 ] }
{ "a" : [ 2, 1 ] }
{ "a" : [ ] }
{ "a" : [ 8, 21 ] }
{ "a" : [ 71, 21 ] }
{ "a" : [ 8 ] }
配列の n 番目の要素を取得する
要素の数を $skip に渡し、制限として値 1 を渡します。
たとえば、2 番目の要素を見つけるには、1 つのエントリをスキップする必要があります。
> db.mycoll.find({}, {_id: 0, a: { $slice: [1,1]}})
{ "a" : [ 2 ] }
{ "a" : [ 2 ] }
{ "a" : [ 1 ] }
{ "a" : [ 2 ] }
{ "a" : [ 8 ] }
{ "a" : [ 2 ] }
$slice
オペレーターは次の点に注意してください。
- 常に配列を返す
- 検索条件に一致するドキュメントに対しては空の配列を返しますが、$slice の選択に対しては空の結果を返します (たとえば、要素が 2 つしかない配列の 5 番目の要素を要求した場合)。