2

完全な結果セット(〜40の結果)を取得しようとすると、実際に問題に直面しています。各オブジェクトには、最大 260 の子参照と他のオブジェクトがパックされています。

実際、30 個のオブジェクトを表示しようとすると、うまくいきます。しかし、40で試してみると、そうではありません。各オブジェクトは正しく、無効なデータはありません。

mongoDb またはデフォルトで Mongoskin (mongodb へのアクセスに使用するライブラリ) によって承認された最大サイズ (4 または 16 mb) を超えたようで、mongodb はアプリケーションへのプール接続を閉じます。

では、ドキュメントの最大サイズまたは結果セットの最大サイズを増やして、必要なものすべてを表示するにはどうすればよいでしょうか?

EDIT:私のコレクションサイズは8Mbです(MongoVue情報から)

EDIT 2: データを取得するために使用するコード:

db.collection("roadmap").find({}).toArray()

私のデータベースのスクリーンショット: ここに画像の説明を入力

EDIT 3:データを利用する方法を変更しました

@em.collection('roadmap').find({}, (err, resultCursor)=>
      nextItem = (err, item)=>
        if !item)
          return

        console.log item
        resultCursor.nextObject(nextItem)
      resultCursor.nextObject(nextItem)
    )

どちらも機能せず、リクエストが実行された後、mongodb 接続が失われます。アプリケーションでこのコードにコメントすると、すべてがうまく機能します。

編集 4 : 完全なスタック トレース、データベースの問題よりもライブラリの問題です

Error: parseError occured
  at [object Object].<anonymous> (/var/www/xxxxxx/Ws/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/connection_pool.js:192:34)
  at [object Object].emit (events.js:98:17)
  at Socket.<anonymous> (/var/www/xxxxxx/Ws/node_modules/mongoskin/node_modules/mongodb/lib/mongodb/connection/connection.js:393:20)
  at Socket.emit (events.js:95:17)
  at Socket.<anonymous> (_stream_readable.js:764:14)
  at Socket.emit (events.js:92:17)
  at emitReadable_ (_stream_readable.js:426:10)
  at emitReadable (_stream_readable.js:422:5)
  at readableAddChunk (_stream_readable.js:165:9)
  at Socket.Readable.push (_stream_readable.js:127:10)
4

2 に答える 2

1

コレクション「ロードマップ」を作成してインデックスを作成することをお勧めします。

 db.roadmap.ensureIndex({zone:1});

これは、以前よりも高速にデータを取得するために使用されます。http://docs.mongodb.org/manual/core/indexes-introduction/ を参照してください

Find を次のように変更します。データは既に配列であるため、toArray 関数は必要ありません。

 db.roadmap.find({},function(err,data){
 if(err){
 console.log(err);
}
console.log(data); 
)

これにより、ロードマップ コレクション内のすべてのデータが検索されます。インデックスは、データ セットが巨大な場合に使用されます。お役に立てれば。

于 2014-12-17T13:09:49.330 に答える