2016-07-11 23 views
0

私はコレクションに接続してから、コレクションに対して自分のクエリを開始しました。しかし、私が結果をログに記録すると、Readableオブジェクトが得られます。これはストリームと見なされます。ストリームメソッドをいくつか使用しましたが、1つのドキュメントしか返しません。なぜそれがjsonを返さないのか分かりません。Mongooseは.find()メソッドを使用してコレクションにクエリを実行しません

const path = require('path'), 
     User = require(path.join(__dirname, '../models/user.js')), 
     Card = require(path.join(__dirname, '../models/card.js')), 
     mongoose = require('mongoose'); 

module.exports = { 

    get: (req, res) => { 
    const foo = mongoose.connection.db.collection('foo'); 

     Card.find({ _id: {$in: req.user.cards } }, 
      { name: 1, 
       bank: 1 }).exec(function(err, cards) { 

     if (err) throw err; 


     // Problem: does not return documents or error 
     foo.find({ bank: 'chase'}, { name: 1, bank: 1, value: 1 }, function(err, bonus) { 
      if (err) throw err; 

      console.log(bonus); 
     }); 


     }); 

    } 

} 

ここに出力があります。私はクエリが実行されているとは思わないが、ここからどこに行くのか分からない。

Readable { 
    pool: null, 
    server: null, 
    disconnectHandler: 
    { s: { storedOps: [], storeOptions: [Object], topology: [Object] }, 
    length: [Getter] }, 
    bson: {}, 
    ns: 'kard_development.kard_bonus', 
    cmd: 
    { find: 'kard_development.kard_bonus', 
    limit: 0, 
    skip: 0, 
    query: { bank: 'Chase' }, 
    slaveOk: false }, 
    options: 
    { skip: 0, 
    limit: 0, 
    raw: undefined, 
    hint: null, 
    timeout: undefined, 
    slaveOk: false, 
    db: 
     EventEmitter { 
     domain: null, 
     _events: [Object], 
     _eventsCount: 6, 
     _maxListeners: undefined, 
     s: [Object], 
     serverConfig: [Getter], 
     bufferMaxEntries: [Getter], 
     databaseName: [Getter], 
     _listening: true }, 
    promiseLibrary: [Function: Promise], 
    disconnectHandler: { s: [Object], length: [Getter] } }, 
    topology: 
    EventEmitter { 
    domain: null, 
    _events: 
     { reconnect: [Function], 
     timeout: [Object], 
     error: [Object], 
     close: [Function], 
     destroy: [Object], 
     serverDescriptionChanged: [Function], 
     serverHeartbeatStarted: [Function], 
     serverHeartbeatSucceeded: [Function], 
     serverHearbeatFailed: [Function], 
     serverOpening: [Function], 
     serverClosed: [Function], 
     topologyOpening: [Function], 
     topologyClosed: [Function], 
     topologyDescriptionChanged: [Function] }, 
    _eventsCount: 14, 
    _maxListeners: undefined, 
    s: 
     { options: [Object], 
     callbacks: [Object], 
     logger: [Object], 
     state: 'connected', 
     reconnect: true, 
     reconnectTries: 30, 
     reconnectInterval: 1000, 
     emitError: true, 
     currentReconnectRetry: 30, 
     ismaster: [Object], 
     readPreferenceStrategies: undefined, 
     authProviders: [Object], 
     id: 0, 
     topologyId: -1, 
     tag: undefined, 
     disconnectHandler: [Object], 
     monitoring: false, 
     haInterval: 10000, 
     wireProtocolHandler: [Object], 
     Cursor: [Object], 
     bsonInstance: {}, 
     inquireServerStateTimeout: null, 
     bson: {}, 
     pool: [Object], 
     isMasterLatencyMS: 8, 
     inTopology: false, 
     serverDetails: [Object], 
     serverDescription: null, 
     topologyDescription: null }, 
    hashedName: '1309e35791f04f1f4fc35d5e683e81d350dd04f4', 
    name: [Getter], 
    bson: [Getter], 
    wireProtocolHandler: [Getter], 
    id: [Getter] }, 
    cursorState: 
    { cursorId: null, 
    cmd: 
     { find: 'kard_development.kard_bonus', 
     limit: 0, 
     skip: 0, 
     query: [Object], 
     slaveOk: false }, 
    documents: [], 
    cursorIndex: 0, 
    dead: false, 
    killed: false, 
    init: false, 
    notified: false, 
    limit: 0, 
    skip: 0, 
    batchSize: 1000, 
    currentLimit: 0, 
    transforms: undefined }, 
    callbacks: null, 
    logger: { className: 'Cursor' }, 
    _readableState: 
    ReadableState { 
    objectMode: true, 
    highWaterMark: 16, 
    buffer: [], 
    length: 0, 
    pipes: null, 
    pipesCount: 0, 
    flowing: null, 
    ended: false, 
    endEmitted: false, 
    reading: false, 
    sync: true, 
    needReadable: false, 
    emittedReadable: false, 
    readableListening: false, 
    resumeScheduled: false, 
    defaultEncoding: 'utf8', 
    ranOut: false, 
    awaitDrain: 0, 
    readingMore: false, 
    decoder: null, 
    encoding: null }, 
    readable: true, 
    domain: 
    Domain { 
    domain: null, 
    _events: { error: [Function] }, 
    _eventsCount: 1, 
    _maxListeners: undefined, 
    members: [] }, 
    _events: {}, 
    _eventsCount: 0, 
    _maxListeners: undefined, 
    s: 
    { numberOfRetries: 5, 
    tailableRetryInterval: 500, 
    currentNumberOfRetries: 5, 
    state: 0, 
    streamOptions: {}, 
    bson: {}, 
    ns: 'kard_development.kard_bonus', 
    cmd: 
     { find: 'kard_development.kard_bonus', 
     limit: 0, 
     skip: 0, 
     query: [Object], 
     slaveOk: false }, 
    options: 
     { skip: 0, 
     limit: 0, 
     raw: undefined, 
     hint: null, 
     timeout: undefined, 
     slaveOk: false, 
     db: [Object], 
     promiseLibrary: [Function: Promise], 
     disconnectHandler: [Object] }, 
    topology: 
     EventEmitter { 
     domain: null, 
     _events: [Object], 
     _eventsCount: 14, 
     _maxListeners: undefined, 
     s: [Object], 
     hashedName: '1309e35791f04f1f4fc35d5e683e81d350dd04f4', 
     name: [Getter], 
     bson: [Getter], 
     wireProtocolHandler: [Getter], 
     id: [Getter] }, 
    topologyOptions: 
     { socketOptions: {}, 
     auto_reconnect: true, 
     host: 'localhost', 
     port: 27017, 
     cursorFactory: [Object], 
     reconnect: true, 
     emitError: true, 
     size: 5, 
     disconnectHandler: [Object], 
     bson: {}, 
     messageHandler: [Function], 
     wireProtocolHandler: [Object] }, 
    promiseLibrary: [Function: Promise], 
    currentDoc: null }, 
    sortValue: undefined } 
+0

最初の 'find'は' .exec() 'を後ろに持ち、' ​​find'はそれを持たないことに注意してください。 – dvlsg

+0

@dvlsg書く場合 'foo.find({bank: 'chase'}、{name:1、bank:1、value:1})。exec(function(...));' === ========================================== ==== エラー: 'TypeError:キャッチされていないエラー:foo.find(...)。execが関数ではありません。 ' – snatera

+0

これはmongodbドライバに直接リンクされていますか? [this](https://github.com/mongodb/node-mongodb-native/blob/2c3d141d9ba22e0030690d33984b3dce8a2afd44/README.md#find-all-documents)が機能するかどうかを確認してください。 – dvlsg

答えて

2

あなたはマングースを使用している場合、それはあなたがモデル/スキーマのが、その少し奇妙なコレクションに対する単純なクエリのために使用している場合は素晴らしいですMongoDBのためのODMとして知られています。 Mongoose API http://mongoosejs.com/docs/api.htmlを見ると、findメソッドはモデルというクエリにしか使えません。これはあなたの最初の検索がうまく動作し、あなたがカードモデルを使用している理由です。あなたは、この行に持っているように、あなたのコレクションにクエリを実行したい場合は

const foo = mongoose.connection.db.collection('foo'); 

それはマングースの接続オブジェクトと全く仕事が.find()メソッドを持っていないではないだろう。あなたができることの1つは、ノードにネイティブのMongoDBドライバを使用することです。@ dvlsgがコメントで暗示していたものを並べれば、あなたが探しているものが得られるでしょう。

関連する問題