0

私は出版物を持っています。基本的には以下のとおりです。

Meteor.publish('entity-filings', function publishFunction(cik, queryArray, limit) {

  if (!cik || !filingsArray)
    console.error('PUBLICATION PROBLEM');

  var limit = 40;


  var entityFilingsSelector = {};
  if (filingsArray.indexOf('all-entity-filings') > -1)
    entityFilingsSelector = {ct: 'filing',cik: cik};
  else
    entityFilingsSelector = {ct:'filing', cik: cik, formNumber: { $in: filingsArray} };


  return SB.Content.find(entityFilingsSelector, {
    limit: limit
  });


});

filingsArrayパート で悩んでいます。filingsArrayMongo $in クエリの正規表現の配列です。filingsArrayパブリケーションに としてハードコーディングでき[/8-K/]、正しい結果が返されます。しかし、ルーターから配列を渡すと、クエリが正しく機能しません。下の画像で、デバッグされた配列の内容を参照してください。2 番目と 3 番目の画像は、クライアントとサーバーの両方で同じ内容を示すクライアント/サーバーのデバッグ コンテンツであり、クエリで配列をハードコーディングした場合と同じです。

私の質問は次のとおりです。何が欠けていますか? クエリが機能しないのはなぜですか、または機能しない可能性のある理由は何ですか?

ここに画像の説明を入力 ここに画像の説明を入力 ここに画像の説明を入力

4

2 に答える 2

1

/8-K/..それは奇妙な正規表現です。試してみてください/8\-K/

マイナス (-) 記号は範囲を示す記号で、通常は角かっこ内で使用されます。どうすれば 8 から K までの範囲を計算できるのでしょうか? それをエスケープしないと、おそらく何の一致にも使用されません (したがって、クエリは機能しません)。時々、それはうまくいきます。ないより安全です。

/8\-K/どこかの文字列に1回一致します"8-K"..これはあなたがやろうとしていると思います.

また、パブリケーションが常に何かを返すことを確認していただけると助かります。失敗する可能性のある適切な領域は次のとおりです。

if (!cik || !filingsArray)
    console.error('PUBLICATION PROBLEM');

これらのパラメーターが入力されていない場合console.logは、おそらくそれを処理する最良の方法ではありません。より良い方法:

if (!cik || !filingsArray) {
     throw "entity-filings: Publication problem.";
     return false; 
} else {
  // .. the rest of your publication
} 

これにより、クライアントがパブリケーション ステータスを不必要に長く待機することがなくなります。どのような (入力) ケースでも、falseまたは aを返しCursor、その間に何も返さないことが保証されているためです (驚きundefinedの s、満たされていないカーソル、その他のガベージ データなど)。

于 2014-11-19T04:13:03.960 に答える