2016-08-29 10 views
0

Meteorでは、私はMongoDBを使ってオブジェクトのコレクションを格納します。約500kのドキュメントが挿入されています。

私はObjets.find({ "_id": { "$in": objIds } });を使用します。objIdsは_idの配列です。これは、配列の長さが1000のときにうまく動作しますが、13145_idsで試してみると、アプリケーションは応答を停止します。

明らかに_idフィールドにインデックスがありますが、この検索はおそらく起こりませんが、これが正常な動作であるかどうかはわかりません。 $ in演算子の最大長はありますか?ドキュメントで見つけられませんでした。ここで

は私の流星で公開します:

Meteor.publish('objetsByIds', function objetsByIdsPublication(objIds) { 
     return Objets.find({ "_id": { "$in": objIds } }); 
    }) 
+0

MongoDBのクエリドキュメントを含む、ドキュメントのサイズには16メガバイトの制限があります。 13,145 ObjectIdはそれぞれ12バイトであるため、この制限を超えてはなりません。どのように結果を反復していますか? 13,145すべてをメモリに読み込んでいる場合は、メモリ制限が発生している可能性があります。 – jstell

+0

これはMeteorサブスクリプションで使用されるため、結果を返すだけです。私はおそらくメモリが不足していますが、私はコンソールのMeteorから例外を取得しないと驚いています。 –

+0

参加をしようとしていますか?クライアント(minimongo)またはサーバー上で?あなたの方法/出版物を見せてもらえますか? –

答えて

0

はMongoDBのは、大量のデータを取得するときのカーソルを使用し、ドライバの実装に依存することは流星がこれを処理する方法である、メテオについて多くを知りません。

カーソルを見ることができますが、私の頭に浮かべる他のアイデアはクエリを分割することです。ですから、1000がうまく動作することがわかっている場合は、modを使用して結果を1000のドキュメントにするループを作りましょう。

+0

Meteorはカーソルも使用します。私はページネーションがまだ進む方法かもしれないと思う。 –