3

mongoDB で次のコレクションを検討してください。

{a:[4,2,8,71,21]}
{a:[24,2,2,1]}
{a:[4,1]}
{a:[4,2,8,21]}
{a:[2,8,71,21]}
{a:[4,2,8]}

次の結果を最も簡単に取得するにはどうすればよいですか。

配列の n 番目の要素を取得する

{a:4}
{a:24}
{a:4}
{a:4}
{a:2}
{a:4}

要素 2 ~ 4 の取得

{a:[8,71,21]}
{a:[2,1]}
{a:[]}
{a:[8,21]}
{a:[71,21]}
{a:[8]}

および他の同様のクエリ。

4

1 に答える 1

7

あなたが探しているのは、$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 番目の要素を要求した場合)。
于 2012-11-30T20:38:08.033 に答える