0
connect = (uri) ->
  new Promise (resolve, reject) ->
    db = mongoose.connection
    db.on "error", reject
    db.on "open", resolve
    mongoose.connect uri

connect(MONGO_URI[NODE_ENV]).then ->
  console.log "Connected to #{NODE_ENV}"
  MyModel.find().exec().then (models) ->
    console.log models.length

これにより、返されるドキュメントの数がランダムであり、コレクション内の完全な数に満たない競合状態が発生します。findただし、遅延 (たとえば 3 秒) でラップすると、すべてのドキュメントが取得されます。しかし、「オープン」イベントを待っていれば、そのような競合状態に陥ることはないだろうという印象を受けました。私はBluebirdの約束を使用していますが、約束を放棄してコールバックのみを使用すると、同じ結果が得られます。

私は何を間違っていますか?

4

1 に答える 1

0

これは私のコードの問題ではありません。これは、スキーマ内のすべての一意のインデックスをコメントアウトすると機能するため、この問題に関連しているようです。これは、MongoDB ドライバーの (まだ解決されていない)バグです。

于 2014-07-05T05:00:47.603 に答える