[NeDBを使い方]データベースのドキュメントを検索しよう。検索:ヨナヨナ更新Android本棚JavascriptHOMEJavascript[NeDBを使い方]データベースのドキュメントを検索しよう。Javascript[NeDBを使い方]データベースのドキュメントを検索しよう。found]NeDBはJavaScriptで作られたデータベースです。Node.js、nw.js、エレクトロン、ブラウザ等で動かすことができます。NeDBはドキュメント型データベースでJSONをそのまま保存できます。そのため、JavaScriptのプログラムと親和性が高く、データの取得、利用が簡単にできます。NeDBはMongoDBと互換性があり、一つのデータベースはMongoDBのコレクションと対応しています。対応は下記の通りです。データベース→コレクションデータロウ→ドキュメント今回は、NeDBのデータベースに保存されているドキュメントを検索する方法について書いていきます。NeDBデータベース内のドキュメントの検索NeDBデータベースに保存したドキュメントはDatastore#findまたはDatastore#findOneを使って検索することができます。Datastore#findは条件に一致した複数のドキュメントをアレイで取得します。Datastore#findOneは特定のドキュメントを取得できます。($regex)の使用ソートの使用ページネーションの使用プロジェクションの機能による結果の変更?上記の条件指定方法は単体で使うこともできますが、複数を組み合わせて使うこともできます。テスト用のデータベース本記事で使う検索対象のデータベースとドキュメントをインサートして準備します。記事内で検索条件指定で得られたドキュメントを説明のために、_idフィールドの値を使います。例:〇〇という検索条件ため、結果はid1,id2,id3のドキュメントの配列になります。db}基本的な検索Datastoreで検索を行う場合、Datastore#findとDatastore#findOneを使用することができます。どちらも同じ下記の引数を持ちます。query:クエリを設定したオブジェクトです。callback:検索処理のコールバック関数です。下記の引数を持ちます。err:エラー発生時の情報オブジェクトです。docs:検索結果のドキュメントです。Datastore#findの場合はアレイ、Datastore#findOneの場合はオブジェクトです。第二引数のcallbackはオプションです、指定した場合と指定しなかった場合で挙動が大きく異なるので注意が必要です。下記のようにqueryに空のオブジェクトを設定するとデータベース内の全てのドキュメントを取得することができます。コレクション内のすべてのドキュメントを取得します。条件に一致した_idがid1,id2,id3,id4,id5,id6のドキュメントが結果として取得できる。});}queryはクエリが設定されたオブジェクトとして定義することができます。queryオブジェクト]となります。任意のフィールドと任意の値を指定し、データベースの中からクエリに合致するドキュメントを取得できます。複数のクエリを設定すると、全てのクエリに合致するドキュメントを取得できます。一致するドキュメントがない場合は空の配列が返却されます。値にオブジェクトを指定するとオブジェクトの完全一致比較を使う深い比較もできる。ドット記法との違いを理解する必要がある。id2は条件に一致しないと判断され、検索結果は空の配列となる。単一のドキュメントを取得できます。条件に一致した_idがid1のドキュメントが結果として取得できる。一致するドキュメントがない場合はdocはnullになります。});}基本的な正規表現の使用クエリでは正規表現リテラルを使うことができます。データベースから指定したフィールドに保存されている文字列に対して正規表現に合致するドキュメントを取得します。正規表現を使ってplanetsフィールドの値の文字列が'ar'を含むドキュメントを全て取得します。});}ドット記法を使った検索(ネステッドドキュメント、ドキュメントアレイ)指定するフィールド名にドットを入れることで、ネストされたドキュメント・ドキュメントのアレイに対して検索条件を設定することができます。ドット記法を使い下記の条件に合致するドキュメントを取得する。条件に一致した_idがid2のドキュメントが結果として取得できる、_idがid4のドキュメントは一致しない。ドット記法を使い下記の条件に合致するドキュメントのアレイを検索する。planetsフィールドの値がオブジェクトまたはオブジェクトのアレイである。条件に一致した_idがid5,id6のドキュメントが結果として取得できる。ドット記法を使い下記の条件に合致するドキュメントのアレイの任意の要素に対してを検索する。planetsフィールドの値がオブジェクトのアレイである。条件に一致した_idがid5のドキュメントが結果として取得できる。配列の要素を指定しているため、仮に"Earth"ではなく"Mars"で検索した場合、検索結果は空となる。});}演算子の使用NeDBにはいくつかの演算子が定義されています。}を基本構文としている。$opには後述の演算子を使用することができる。$ne)の使用NeDBでは下記の比較演算子が使用できます。この演算子を使う場合、valueは配列である必要がある。配列の中に含まれない。この演算子を使う場合、valueは配列である必要がある。ドキュメントにフィールドが存在するか。$lt,$lte,$gt,$gteは数値と文字列に対して使用することができます。humans.gendersフィールドを持つのはid2とid4です。条件が5より大きいなので、id4のドキュメントが検索結果に入ります。$lt,$lte,$gt,$gteを文字列に対して使用すると辞書順で判断されます。条件が辞書順でMercuryより後なので、id4のドキュメントが検索結果に入ります。$inと$ninは同じ使い方をしますが、判定が反転します。'Jupiter']に含まれているものなので、id2,id3が検索結果となります。$existsはフィールドの有無を判定します。satellitesフィールドが存在するのはid1だけなので、検索結果はid1になります。});}正規表現演算子($regex)の使用クエリにオブジェクトを使用して検索する場合、$regexを使うことで正規表現を使用することができます。$regex演算子は正規表現に適合するかを判定します。他の演算子と一緒に使っています。planetに'ar'が部分的に含まれているドキュメントはid1,id2です。'Earth']に含まれないのはid1です。そのため検索結果はid1となります。)論理演算子で複数の演算子を組み合わせて複雑な演算を行うことができます。クエリの配列をorで繋ぎます。クエリの配列をandで繋ぎます。クエリの判定を反転させます。ドキュメントの内容に対して関数を適用します。この関数はtrue/falseを返し、trueの場合、ドキュメントは検索結果に含まれます。$or演算子を使い、複数条件の論理和で検索します。コレクションの中からplanetが'Earth'または'Mars'のドキュメントを探します。検索結果はid1,id2の配列になります。$not演算子を使い、条件の否定で検索します。コレクションの中からplanetが'Earth'以外のドキュメントを探します。検索結果はid2以外のドキュメントの配列になります。$where演算子を使い、ドキュメントの内容に対して条件を設定します。コレクションの中からドキュメントのフィールドが6以上のを探します。検索結果はid2以外のドキュメントの配列になります。基本的なクエリと一緒に使うことができます。コレクションの中からplanetフィールドが'Earth'または'Mars'でinhabitedフィールドがtrueのドキュメントを探します。検索結果はid2のドキュメントの配列になります。});}ソートとページネーションの使用Datastore#findとDatastore#findOneの第二引数callbackを設定しない場合、メソッドはCursorオブジェクトを返却します。Cursorオブジェクトは下記のメソッドを持ちます。sort:ソートするフィールドと昇降順を設定します。一つ以上のフィールドに対してそれぞれ昇順(1),降順(-1)を設定することができます。skip:スキップする要素数を設定します。limit:取得するドキュメント数を設定します。exec(callback):Cursorオブジェクトの内容を実行し、コールバックで検索結果を取得します。上記のメソッドを組み合わせることでソートやデータベースの任意の順番にあるドキュメントを取り出すページネーションを実現することができます。クエリを設定せずコレクション全体を取得します。コレクション内のドキュメントをplanetを昇順にソートし、2番目のドキュメントから2つのドキュメントを取得します。コレクション内のsystemが'solar'のドキュメントを降順にソートして取得します。複数のフィールドに対してソートを設定することができます。コレクション内のドキュメントをplanetを昇順、systemを降順にソートして取得します。配列が条件に指定された場合、NeDBはvalueの配列と完全一致しているかどうかを判定します。配列固有演算子がある場合はその演算子を適用します。配列のサイズが一致するかを判定します。配列要素内の一つ以上の要素に適合するかを判定します。完全に一致するドキュメントを探します。satellitesフィールドが完全に一致するのはid1だけなので、検索結果はid1になります。satellitesフィールドの要素は一致しますが、順番が異なるのでid1は検索結果に含まれません。ドキュメントのフィールドが配列だった場合、クエリは全ての要素に適用され、要素内のいずれかと一致するかを判定します。コレクションの中からsatellitesの配列内に'Phobos'の要素を持つドキュメントを探します。検索結果にはid5のドキュメントが含まれます。}としても同様の結果が得られます。演算子も全ての要素に適用される。コレクションの中からsatellitesの配列内の要素が辞書順で'Amos'より早いドキュメントを探します。PhobosとDeimosはAmosより後なので、検索結果には空になります。$in演算子と$nin演算子も使うことができます。コレクションの中からsatellitesの配列内の要素に'Moon'または'Deimos'を含むドキュメントを探します。satellitesにDeimosを含むので、検索結果にid1が含まれます。配列固有演算子の$elemMatch演算子を使いドキュメントを探します。completeData.planetsに格納されている配列の全要素に対して条件の適用を行うため$elemMatch演算子を使用します。}を含むid5が検索結果になります。}を含むドキュメントがないため検索結果は空になります。$elemMatch演算子の条件の中でも、通常の演算子を使うことができます。completeData.planetsの配列要素で「nameが'Earth'」かつ「numberが2以上」のドキュメントの検索結果にはid5が含まれます。$sizeは配列数を検索条件とします。$size演算子は他の演算子を入れ子にすることはできません。コレクションの中からsatellitesの配列要素数が2のドキュメントを探します。検索結果にはid5が含まれます。コレクションの中からsatellitesの配列要素数が1のドキュメントを探します。検索結果は空の配列になります。});}Date型への検索Date型のデータが保存されているフィールドに対してクエリを作る場合はJavascriptのDateクラスを使うことができます。Date型への検索クエリには比較演算子を使用することができます。})}FacebooktwitterHatenaPocket関連記事を表示[NeDBを使い方]データベースの永続性やパフォーマンスについて。2019年1月17日[NeDBを使い方]データベースのドキュメントにインデックスを設定しよう。2019年1月16日[NeDBを使い方]データベースのドキュメントをアップデートしよう。2019年1月15日[NeDBを使い方]データベースの検索結果をプロジェクションしよう。2019年1月15日[NeDBを使い方]データベースのドキュメントを削除しよう。2019年1月12日[NeDBを使い方]データベースのドキュメントをカウントしよう。2019年1月12日[NeDBを使い方]データベースにデータをインサートしよう。2019年1月10日[NeDBを使い方]データベースをロード、クリエイトしよう。関連記事:[NeDBを使い方]データベースをロード、クリエイトしよう。[NeDBを使い方]データベースのドキュメントを削除しよう。[NeDBを使い方]データベースの検索結果をプロジェクションしよう。[NeDBを使い方]データベースのドキュメントをアップデートしよう。データベースタグJavascriptNedbNoSQLデータベース[NeDBを使い方]データベースにデータをインサートしよう。[NeDBを使い方]データベースのドキュメントをカウントしよう。Reserved.Top。