第一歩
NPMを使用してMongoDBのモジュールをダウンロード
第二のステップ
インポート背景MongoDBのモジュール
注意:モジュールが最初に導入され、独自のフォルダがモジュールをnode_modules見つけ、とされていない場合は、グローバル(ノードのインストールディレクトリ)に行くことになります
HTTP =は( "HTTP"を必要としましょう)。
MongoDBのは=( 'MongoDBは')を必要とせ; //インポートモジュールのMongoDB
= MongoClientレットmongodb.MongoClient; //データベースオブジェクトへの接続を作成します
バックグラウンドでのデータベースの操作後にデータベースに接続することができます。
ネイティブに書かれたバックグラウンドサービス、コードの解釈
必要とHTTP = LET(「HTTP」); // インポートモジュールはMongoDBの のletにMongoDBを=必要(「MongoDBは」); // 導入モジュールは最初、自分のフォルダにモジュールをnode_modules見つけ、そうでない場合は、に行きますグローバル(ノードのインストールディレクトリ)を見つけるために 、// データベースへの接続を作成すると、オブジェクト のlet MongoClient = mongodb.MongoClientを、 letのサーバー = http.createServer(); server.on( "要求"、(REQ、RES)=> { のlet database_url = "MongoDBの:// localhostを:27017 /"; // のアドレスデータベース のletデータベース名= "学校"; // データベースの名前 のlet URLのdatabase_url + = データベース名; //アドレスデータベース名データベースプラス MongoClient.connect(URL、( ERR、DB) =>{//データベースに接続 // 接続が成功した後、データベース接続不良ERRが値DBを持っていますエラーメッセージを誤ることは、データのインスタンスである、すべての操作は、この例では完了までに行われる IF (ERR){ にconsole.log (「データベース接続失敗" ); を返す; } はconsole.log( '接続成功' ); VAR OBJ = {"名前":"ボブへ""年齢"120、 "趣味":" スリープA」、 、 "Aを食べる"、 "スコア":{ "宇文":590であり、 "shuxue":800 }} (db.collection。 "学生")insertMary(OBJ、(ERR、結果)=> {//学校データベースコレクション、挿入生徒データ IF (ERR){ コンソール。ログイン( 「挿入が失敗した」); を返します; } にconsole.log(結果); //オブジェクト、データベースに関する有し、データを挿入するための方法および属性 res.endを(result.toString())
db.Close(); // db.Close(); //閉じられ、使用が完了した後たびにデータベース操作をデータベースを閉じ
});
});
})server.listen( 3000)。
関連する方法のCRUD
データベースは、複数組を有していてもよく、セットは複数のデータアレイのセット、データ・オブジェクト・フォーマット(JSON)複数のメモリを有することができます
データベースが設定されていない場合db.collection(「収集名」)メソッドは、その後、検索時間を変更するための追加や削除は、デフォルトのコレクションで追加されます
複数のデータの挿入
db.collection( "コレクション名").insertMany(挿入されたデータ(ターゲット・フォーマット)、関数(ERR、結果){ IF)ERR(スローERR; db.Close(); //データベースの動作を閉じ })。
データの挿入
db.collection( "コレクション名")。insertOne(データ挿入(ターゲットフォーマット)、機能(ERR、RES){ IF)ERR(スローERR;はconsole.log( "成功への文書" ); db.Close() ; });
クエリデータ
。db.collection( "収集名")検索(検索データ(オブジェクト))のtoArray(。機能(ERR、結果){ // 見つかったデータを返す IF(ERR)スローERR; はconsole.log(結果を)。 //は、パケットの配列オブジェクト、オブジェクトを見つけるために検索に準拠したデータを返す 。)(db.Closeを )}。
更新データ(修正データ)
更新
。db.collection(以下"サイト")updateOne(置き換えデータ(オブジェクト)、更新されたデータ(オブジェクト)、機能(ERR、RES){ IF(ERR)スローERR; はconsole.log( "正常に更新文書" ) ; db.Close(); });
注:修正データのみ部分データのためのデータのセットを修正することができます
更新複数
VAR whereStr = { "タイプ": 'EN'}; // クエリ するvar updateStr = { $のSET:{ "URL": "https://www.runoob.com" }}; dbo.collection(設定名) .updateMany(whereStr、updateStr、関数(ERR、RES){ IF)ERR(スローERR; はconsole.log(res.result.nModified + "ドキュメントが記事更新される" ); //result.nModifiedは更新の数です。 db.Close(); });
$見つからない場合、それは対応するデータを作成する設定し、挿入セット
更新する$解除$セットに置き換えられます、それはフィールドを削除します
データを削除します。
条件の削除最初のデータを
db.collection(コレクション名)。deleteOne((オブジェクト)、検索する条件関数(ERR、OBJ){ IF)ERR(スローERR; はconsole.log( "ドキュメントが正常に削除する" ); db.Close(); }) ;
複数のデータを削除します。
すべてのデータを削除適格
。db.collection(コレクション名)deleteMany(検索条件(オブジェクト)、機能(ERR、OBJ){ IF(ERR)スローERR; はconsole.log(obj.result.n + "記事の文書が削除されました" ); デシベル。クローズ(); });
クエリページ
。dbo.collection(設定名).find()スキップ(2)限界(2).toArray(関数(ERR、結果){ IF(ERR)スローERR; にconsole.log(結果); // 問い合わせに戻る結果処理されたデータタブ後 ; db.Close() })。
クエリにすべてのデータ(NUM)をスキップし、スキップnumがデータのクエリ結果を返します。
すべてのデータ限界(NUM)は、照会データのNUMを返します
ページングクエリはデータが大きすぎると、部分的に検索使用することができます
DAO層感謝と梱包
DAO層理由
Javaで起こされ、JavaのDAOは、非常に大きなを書くことができます
データベース層への特別な接続を行い、その後、背景にアクセスするためのインタフェースを公開
DAOロジック
DAO層設計は、まず、データ・トラフィックを処理するために、このインタフェースモジュールを呼び出すことができ、インターフェースDAOに設計されています
このインタフェースの実装クラスを気にせず、それは非常に明確な構造、データソースのDAOの層構成されたクラスです。
DAO層の効果
主な仕事は、データの永続化層を行うことですタスクの一部との連携の責任は、このデータベースにカプセル化されています
要するに:それはモジュールの導入によって得られる、データベースの操作のパッケージ方法は、バックグラウンド動作のためのインターフェースは、中間層と、中間データベースで取得され、露出します
ノードでは、DAO層も非常に大きく書くことができます。
以下は、のMongoDBの接続ノードDAO層であります
VaRの MongoDBの=( "MongoDBの"必要); VAR MongoClient = mongodb.MongoClient; 機能_connectDB(コールバック){ LETのdatabase_url = "のMongoDB:// localhostの:27017 /"; // のアドレスデータベース LETデータベース名= "データ"; / / データベース名 LETのURLのdatabase_url + = データベース名; MongoClient.connect(URL、関数(ERR、DB){ IF (ERR){ コールバック(ERR、NULL ); リターン; } コールバック(ERR、DB); }) } // 露出//挿入データインターフェース exports.insertOne = 関数(COLLECTIONNAME、JSON、コールバック){ _connectDB(関数(ERR、DB){ db.collection(COLLECTIONNAME).insertOne(JSON、(ERR、結果) => { // IF(ERR){ // コールバック(ERR、ヌル) // 返す; // } コールバック(ERR、結果); db.close(); }); }) } // 删除的接口 exports.deleteMany = 関数(COLLECTIONNAME、JSON、コールバック){ _connectDB(関数(ERR、DB){ db.collection(COLLECTIONNAME).deleteMany(JSON、関数(ERR、結果){ コールバック(ERR、結果); db.Close(); }) }) } // 更新データ exports.updateMany = 関数(COLLECTIONNAME、json1、 json2、コールバック){ _connectDB(関数(ERR、DB){ db.collection(COLLECTIONNAME).updateMany(json1、json2、関数(ERR、結果){ コールバック(ERR、結果); db.Close(); }) } ) }
// ページパラメータを渡す必要ができない、のは、私は改ページを必要としないとしましょう exports.find = 機能を(COLLECTIONNAME、JSON、C、D){ VARの結果=[]; IF(== arguments.lengthを3。){ // この時間が必要とされないページング VARコールバック= C; VAR limitnum = 0 ; VARの skipnum = 0 ; } そう IF(== arguments.lengthを4。){ / / パラメータcを被験者に渡されると仮定{ // pageamount:10、 // ページ:0 // } VARコールバック= D; // 最後に、コールバック関数である VaRの引数の=のC; // 条件タブ / / 記事番号を省略 するvarargs.page || * = args.pageamount skipnum 0(ERR){; // 数値見つかり VAR limitnum args.pageamount || = 0 ; // ソート VARソートargs.sort || = {}; } 他{ スロー 新しい新しいエラーが発生しました(「引数の数が3以上である必要があります見つけます4 ' ) リターン; } _connectDB(関数(ERR、DB){ VARのカーソル= db.collection(COLLECTIONNAME).find(JSON).SKIP(skipnum).limit(limitnum).sort(ソート) cursor.each(関数(ERR、DOC){ IF コールバック(ERR、NULL ); db.close(); リターン } もし(!DOC = NULL ){ result.push(DOC)。 } 他{ コールバック(NULL 、結果)。 db.close() } }) }) }
通訳ページングクエリパッケージ
COLLECTIONNAME:データ・セット名を照会する必要があります
JSON:オブジェクトの検索条件
C、Dは、2例
1ないページネーションクエリ場合、Dパラメータは必要としない、及びCパラメータは、コールバックに渡される
2ページングクエリ、着信Cは、オブジェクトは、Dのコールバック、ページングを照会することです関数
この時点では、数値ではなく、C着信オブジェクトの形でなければなりません
// Cオブジェクトテンプレート
C = {
pageamount:10、//数値スキップ
0 @ディスプレイの数を:ページ
}
ページングクエリは区別します
すべてのデータに基づいて、フロントページの偽のすべてを介してデータベースからすべてのデータを取得するために、バックグラウンド、その後、そのままフロントデスクへのページへ。
背景偽のページングが舞台裏のすべてをデータベースとそれに渡されたパラメータに基づいて、フロントエンドから来るデータのすべてを取得するには、いくつかのデータのフロントエンドに戻りました。
本当にページは、そのコンテンツの伝送を減らすこと、データベースに物事を行います。