5

私はマングースのドキュメントから、カスタムスキーマタイプを作成して既存のものに追加できることを読みました。

示唆されたように、私はmongoose-longの例を調べようとしました: https://github.com/aheckmann/mongoose-long

これは、マングース モデルのプロファイルを持つ開発中のアプリケーションで必要です。プロファイルにはname、などのいくつかのフィールドsurnameがありMultiValueFieldます。AMultiValueFieldは、次の構造を持つオブジェクト上にあります。

{
    current : <string>
    providers : <Array>
    values : {
         provider1 : value1,
         provider2 : value2
    }
}

上記の構造には、フィールドの値を取得できる許可されたプロバイダーのリスト (優先度順) があります。現在のプロパティは、フィールドの値として使用するために現在選択されているプロバイダーを追跡します。最後に、オブジェクト値には各プロバイダーの値が含まれます。

node.js でオブジェクトを定義しました。そのコンストラクターは上記の構造を引数として取り、新しいプロバイダーを設定したり、値を追加したりするための多くの便利なメソッドを提供します。

プロファイルの各フィールドは、異なるプロバイダーのリストで初期化する必要がありますが、その方法はまだ見つかりません。

MultiValueFieldとして定義する場合Embedded Schema、各フィールドを としてのみ持つことができますArray。また、プロバイダーのリストを使用してプロファイルを作成する時点で、すべてのフィールドを初期化することはできません。

SchemaType MultiValueFieldType最善の解決策は、を返すキャスト関数を持つを定義することだと思いますMultiValueField object。しかし、そのようなカスタム スキーマ タイプを定義するにはどうすればよいでしょうか? また、プロファイルのスキーマで定義するときにカスタム オプションを使用するにはどうすればよいですか?

カスタムスキーマタイプの作成方法を尋ねるために、mongoose Google グループに質問を投稿しました: https://groups.google.com/forum/?fromgroups#!topic/mongoose-orm/fCpxtKSXFKc

4

1 に答える 1

0

カスタム スキーマ タイプを配列としてのみ作成することもできました。モデルを初期化できますが、このアプローチには欠点があります。

  • 必要がなくても配列があります
  • 他のモデルで ParameterSchema を使用する場合は、複製する必要があります

カスタム スキーマ タイプ コード:

// Location has inputs and outputs, which are Parameters

// file at /models/Location.js
var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var ParameterSchema = new Schema({
  name: String,
  type: String,
  value: String,
});

var LocationSchema = new Schema({
    inputs: [ParameterSchema],
    outputs: [ParameterSchema],
});

module.exports = mongoose.model('Location', LocationSchema);

モデルを初期化するには:

// file at /routes/locations.js
var Location = require('../models/Location');

var location = { ... } // javascript object usual initialization

location = new Location(location);
location.save();

このコードを実行すると、初期化された場所がそのパラメーターと共に保存されます。

あなたの質問のすべてのトピックを理解できたわけではありませんが、この回答がお役に立てば幸いです。

于 2015-05-14T18:06:00.050 に答える