サーチ…


前書き

MongoDBは、MEANスタックのおかげで、最も人気のあるNoSQLデータベースの1つです。 ExpressアプリケーションからのMongoデータベースとのインターフェースは、ちょっとした質問構文を理解すればすばやく簡単です。私たちはMongooseを使って私たちを助けます。

備考

詳細はこちらをご覧くださいhttp : //mongoosejs.com/docs/guide.html

MongoDBのインストール

npm install --save mongodb
npm install --save mongoose //A simple wrapper for ease of development

サーバーファイル(通常index.jsまたはserver.jsという名前)

const express = require('express');
const mongodb = require('mongodb');
const mongoose = require('mongoose');
const mongoConnectString = 'http://localhost/database name';

mongoose.connect(mongoConnectString, (err) => {
  if (err) {
    console.log('Could not connect to the database');
  }
});

マングースモデルの作成

const Schema = mongoose.Schema;
const ObjectId = Schema.Types.ObjectId;

const Article = new Schema({
  title: {
    type: String,
    unique: true,
    required: [true, 'Article must have title']
  },
  author: {
    type: ObjectId,
    ref: 'User'
  }
});

module.exports = mongoose.model('Article, Article);

これを解剖しましょう。 MongoDBとMongooseはJSON(実際はBSONですが、ここでは無関係です)をデータ形式として使用しています。上には、タイピングを減らすためのいくつかの変数を設定しました。

私はnew Schemaを作成し、それを定数に割り当てます。これは単純なJSONです。各属性は、一貫性のあるスキーマを強化するのに役立つプロパティを持つ別のオブジェクトです。 Uniqueは、新しいインスタンスをデータベースに挿入して、明らかに一意にするよう強制します。これは、ユーザーがサービス上で複数のアカウントを作成するのを防ぐのに最適です。

必須は別のもので、配列として宣言されています。最初の要素はブール値で、2番目の要素は挿入または更新される値が存在しない場合はエラーメッセージです。

ObjectIdsは、モデル間の関係に使用されます。たとえば、「ユーザーには多くのコメントがあります。 ObjectIdの代わりに他の属性を使用することもできます。ユーザー名のような文字列は一例です。

最後に、APIルートで使用するためにモデルをエクスポートすると、スキーマにアクセスできます。

Mongoデータベースのクエリ

簡単なGETリクエスト。上記の例のモデルが./db/models/Article.jsファイルにあるとします。

const express = require('express');
const Articles = require('./db/models/Article');

module.exports = function (app) {
  const routes = express.Router();
  
  routes.get('/articles', (req, res) => {
    Articles.find().limit(5).lean().exec((err, doc) => {
      if (doc.length > 0) {
        res.send({ data: doc });
      } else {
        res.send({ success: false, message: 'No documents retrieved' });
      }
    });
  });

app.use('/api', routes);
};

このエンドポイントにHTTPリクエストを送信することで、データベースからデータを取得できるようになりました。しかし、いくつかの重要な事柄:

  1. 限界はそれがどんなものかを正確に示します。私は5つの文書を戻しているだけです。
  2. Leanは生のBSONから何かを取り除き、複雑さとオーバーヘッドを減らします。不要です。しかし、便利です。
  3. 使用する場合はfindのではなく、 findOne 、ことを確認してdoc.lengthこれが0よりも大きいfind常に配列を返します。それは長さがチェックされていない限り、その空の配列は、あなたのエラーを処理しません。
  4. 私は個人的にその形式でエラーメッセージを送信するのが好きです。ニーズに合わせて変更してください。返されたドキュメントでも同じです。
  5. この例のコードは、エクスプレス・サーバー上に直接置くのではなく、別のファイルに置いたことを前提として書かれています。サーバーでこれを呼び出すには、サーバーコードに次の行を含めます。
const app = express();
require('./path/to/this/file')(app) // 


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow