2

次のようなマングースのスキーマがある場合(例):

Meta = new Schema
  type_id:Number,
  datahash: String,
  data: Schema.Types.Mixed

これはすべて良いです。Meta.datahashをクエリして値を取得することはできますが、 Meta.OtherPropをクエリすると、プロパティがモデルに存在しないため、エラーが発生します。

PHP には、これを処理できる魔法のメソッド (ゲッター/セッター) があります。

Mongoose (または NodeJS) でこれを行う方法はありますか。例は大歓迎です:)

BR/スネ

編集: data が次のようなオブジェクトであるとしましょう:

{
  56:'somevalue',
  77:'Othervalue'
}

今-このように直接クエリできる方法はありますか

Meta.data.56

そして、「somevalue」が返されますか?

また、iクエリのjsエラーを回避する方法はありますか

Meta.data.90

プロパティが存在しないため?

4

2 に答える 2

1

私はマングースを使用していません。ただし、同期と非同期の両方のケースでデフォルトを設定するために使用できるパターンがいくつかあります。

var  DATA={ 56:'somevalue',  77:'Othervalue' };

// SYNC: from JS object
function getPropOrDefault(prop){
  var val = DATA[String(prop)];
  var ret = (val !== undefined ? DATA[String(prop)] : 'default');
  return ret;
};


// ASYNC: from mongoose
function getFromMongoose(key,fn){
//or something. idk how u query mongoose
  process.nextTick(function(){
    var val = DATA[String(key)];
    if(val === undefined) { fn(new Error('no_property')) }
    else{ fn(null, val) };
  });
};

function getMongoosePropOrDefault(prop, callback){
  getFromMongoose(prop, function(err, result){
    if(err){ 
      callback(err, 'default');
    } else {
      callback(null, result);
    };
  });
};


(function main(){
  console.log('DATA[77]: '+getPropOrDefault(77) );
  console.log('DATA[99]: '+getPropOrDefault(99) );
  getMongoosePropOrDefault(77, function(err, result){
    console.log('mongoose.data.77: '+result);
  });
  getMongoosePropOrDefault(99, function(err, result){
    console.log('mongoose.data.99: '+result);
  });
})();
于 2013-02-07T15:02:14.260 に答える
0

返信ありがとうございます。

Meta.data のデフォルト値を設定するだけで、ドット表記の代わりに角括弧 [] を使用して、データ内の存在しないプロパティをクエリできることがわかりました。

Meta.data[88]

これは、実際にはノードやマングースよりもjsに関連していた私の問題を解決します。もちろん、次のようなサブプロパティをクエリする場合、これは機能しません。

Meta.data[88].something

88が存在しない限り。しかし、繰り返しになりますが、それは単なるJavaScriptです...

于 2013-02-08T09:46:32.050 に答える