0

Mongoose を使用して、ノード ベースの Web アプリに次のスキーマがあります。

var headerSchema = new mongoose.Schema({
    name: String,
    values: String,
    state: String
});

var responseSchema = new mongoose.Schema({
    name: String,
    responseText: String,
    active: String
});

var requestSchema = mongoose.Schema({
    id: String,
    name: String,
    description: { type: String },
    url: String,
    verb: String,
    createdAt: { type: Date, default: Date.now },
    headers: [headerSchema],
    body: String,
    responses: [responseSchema]
});

リクエスト スキーマは、mongo データベース内にコレクションとして保存されるスキーマであり、ヘッダー スキーマとレスポンス スキーマはそのサブコレクションです。

私が直面している問題は、リクエストスキーマドキュメントの更新方法を理解することです.responseSchemaなどのサブコレクションの1つからアイテムを追加、更新、および削除するための最良の方法は何ですか.

私はmongoにかなり慣れていないため、これを最もよく達成する方法の明確な例を見つけることができませんでした.

よろしくお願いします

4

1 に答える 1

1

まず、次のようなものを使用してこのモデルを構築したと仮定します。

var request = mongoose.model( 'request', requestSchema );

モデルが利用可能になると、Mongoose はサブドキュメントを処理するためのいくつかのヘルパー メソッドを提供します。_idまず、サブドキュメントを作成すると、Mongoose が一意の識別子を自動的に割り当てることに注意してください。特定のサブドキュメントを更新または削除するには、これが何であるかを知る必要があります。

以下の簡単な例は、主な方法の概要を示しています。これは、次のことを知っていることを前提としています。

  • requestID_id-リクエストの一意
  • headerID_id-ヘッダー サブドキュメントの一意

request.findById( requestID, 
  function (err, request) {
    if(!err){

      // 1: Add a new header
      request.headers.push({
        name: "My header name"
      });

      // 2: Modify a specific header
      var thisHeader = request.headers.id(headerID);
      request.headers.nam = "My header name";

      // 3: Delete a specific header
      var thisHeader = request.headers.remove(headerID);

      request.save(function (err, request){
        if(!err){
          console.log('request saved: ' + request);
        }
      });
    }
  }
);
于 2013-09-16T09:56:22.323 に答える