2016-12-16 12 views
1

値の配列を持つフィールドを照会してmongoDBからデータのストリームを開き、配列のインデックスごとに1つのレコードしか返そうとしていません。mongo cursor findOne

var cursor = Collection.findOne({'lastName': { $in: [arrayOfLastNames]}}).cursor(); 

    cursor.on('data', function (record) { 
    //do something with record 
    })  

何らかの理由で、arrayOfLastNamesのインデックスごとに複数のレコードを取得しています。 .findOne()メソッドは.find()のように動作します。 これがなぜ起こっているのか、またはこの実装の可能な代替案があれば大いに感謝します。

+0

なぜ1つのアイテムだけが必要なときにカーソルを使用するのですか? – qqilihq

+0

@qqilihq arrayOfLastNamesの項目ごとに1つのレコードが必要です。カーソルの理由は、データの量がメモリを超えているためです。 –

答えて

2

カーソルを使用したために問題が発生しています。 mongoDB documentationから、 "単一のドキュメントが返されるため、findOne()の結果にカーソルメソッドを適用することはできません。"あなたのコメントから

は、アレイ内の任意の項目に一致する文書の「 natural order」に応じて最初の文書を検索します findOne$in以来、アレイ内のすべての項目のために一度 findOneを呼び出したい(あなたも検討するかもしれません正直なところ、一般的な findを使用してください。カーソルソリューションが機能します)。