MongoDB
 Computer >> コンピューター >  >> プログラミング >> MongoDB

MongoDBの$slice演算子で特定フィールドの配列をスライスする方法

MongoDBの$slice演算子で特定フィールドの配列をスライスする方法

MongoDBで配列をスライス(部分的に取得)するには、$slice 演算子を使用します。$slice は find() メソッドの射影(projection)と組み合わせて使うことで、配列フィールドから必要な要素だけを取り出すことができます。

まずは、ドキュメントを含むコレクションを作成してみましょう。

> db.demo503.insertOne({_id:1,Name:"John",Subject:["MySQL","Java","C"]});
{ "acknowledged" : true, "insertedId" : 1 }
> db.demo503.insertOne({_id:2,Name:"David",Subject:["MongoDB","C++","Python"]});
{ "acknowledged" : true, "insertedId" : 2 }

find() メソッドを使って、コレクション内のすべてのドキュメントを表示します。

> db.demo503.find().pretty();

このコマンドを実行すると、次のような出力が得られます。

{ "_id" : 1, "Name" : "John", "Subject" : [ "MySQL", "Java", "C" ] }
{
    "_id" : 2,
    "Name" : "David",
    "Subject" : [
       "MongoDB",
       "C++",
       "Python"
    ]
}

$slice演算子を使った配列のスライスクエリ

続いて、指定したフィールドの配列をスライスするクエリを見ていきましょう。ここでは $slice に負の値「-1」を指定しています。負の値を指定すると、配列の末尾から指定した数の要素を取得できます。

> db.demo503.find({_id:2}, { 'Subject': { $slice: -1 }});

実行すると、次の出力が得られます。

{ "_id" : 2, "Name" : "David", "Subject" : [ "Python" ] }

_id が 2 のドキュメントの Subject 配列から、末尾の要素である「Python」だけが取得できていることがわかります。

$sliceの指定方法のまとめ

  • 正の数 n を指定:配列の先頭から n 個の要素を返します(例:{ $slice: 2 })。
  • 負の数 -n を指定:配列の末尾から n 個の要素を返します(例:{ $slice: -1 })。
  • [skip, limit] 形式を指定:先頭から skip 個の要素を読み飛ばし、その後 limit 個の要素を返します(例:{ $slice: [1, 2] })。

このように $slice 演算子を使えば、配列全体を取得せずに必要な要素だけを効率的に取り出すことが可能です。大量の要素を持つ配列フィールドを扱う際に、レスポンスサイズの削減やパフォーマンス向上に役立ちます。

  1. 【MongoDB】idがドキュメント内の配列フィールドの値と一致する場合に除外するクエリの書き方

    MongoDBでは、ドキュメントの id フィールドの値が、同一ドキュメント内の配列型フィールド(例: subjectid)に含まれている場合に、そのドキュメントを検索結果から除外したいケースがあります。このような条件を実現するには、 $expr 演算子と組み合わせて $not および $in を使用します。本記事では、サンプルコレクションの作成からクエリの実行、出力結果の確認までを順を追って解説します。 サンプルコレクションの作成 まずは、動作確認用のドキュメントを含むコレクションを作成します。ここでは、 id フィールドと、文字列の配列を持つ subjectid フィールドを備えた2件のド

  2. $elemMatch演算子を使った配列フィールドを持つドキュメントの検索方法【MongoDB】

    MongoDBで配列フィールド内の要素に基づいてドキュメントを検索したい場合、$elemMatch 演算子を使用します。$elemMatch を使うことで、配列内の同一の要素に対して複数の条件を同時に適用できるのが大きな特徴です。この記事では、実際にコレクションを作成し、配列フィールドを含むドキュメントを $elemMatch で照合する手順を解説します。1. テスト用コレクションの作成まず、配列フィールド details を持つドキュメントを挿入して、サンプルコレクションを作成しましょう。> db.demo592.insertOne( ... { ... id:1