2016-11-30 121 views
1

我attemping在我的數據庫運行mongoose.findOne但我得到意想不到的results.My查詢Mongoose.js findOne返回查詢的元數據

const User = mongoose.model('User', {name: String, email: String, passwordHash: String, validation: String, validationCode: String, favorites: Array }) 


exports.findUser = function findUser(email){ 

    const foundUser = User.findOne({email: email}, function(err, userObj){ 
     if(err){ 
      return err 
     }  else if (userObj){ 
      return userObj 
     }  else{ 
      return null 
     } 
    }) 

    return foundUser 
} 

然而,這返回下面的數據(看似隨機的?)而現在沒有我不知道如何解決這個問題,我要求

Query { 
    _mongooseOptions: {}, 
    mongooseCollection: 
    NativeCollection { 
    collection: null, 
    opts: { bufferCommands: true, capped: false }, 
    name: 'users', 
    collectionName: 'users', 
    conn: 
     NativeConnection { 
     base: [Object], 
     collections: [Object], 
     models: [Object], 
     config: [Object], 
     replica: false, 
     hosts: null, 
     host: 'ds113938.mlab.com', 
     port: 13938, 
     user: 'root', 
     pass: 'root', 
     name: 'users', 
     options: [Object], 
     otherDbs: [], 
     _readyState: 2, 
     _closeCalled: false, 
     _hasOpened: false, 
     _listening: false, 
     db: [Object] }, 
    queue: [], 
    buffer: true, 
    emitter: 
     EventEmitter { 
     domain: null, 
     _events: {}, 
     _eventsCount: 0, 
     _maxListeners: undefined } }, 
    model: 
    { [Function: model] 
    hooks: Kareem { _pres: {}, _posts: {} }, 
    base: 
     Mongoose { 
     connections: [Object], 
     plugins: [], 
     models: [Object], 
     modelSchemas: [Object], 
     options: [Object] }, 
    modelName: 'User', 
    model: [Function: model], 
    db: 
     NativeConnection { 
     base: [Object], 
     collections: [Object], 
     models: [Object], 
     config: [Object], 
     replica: false, 
     hosts: null, 
     host: 'ds113938.mlab.com', 
     port: 13938, 
     user: 'root', 
     pass: 'root', 
     name: 'users', 
     options: [Object], 
     otherDbs: [], 
     _readyState: 2, 
     _closeCalled: false, 
     _hasOpened: false, 
     _listening: false, 
     db: [Object] }, 
    discriminators: undefined, 
    schema: 
     Schema { 
     obj: [Object], 
     paths: [Object], 
     subpaths: {}, 
     virtuals: [Object], 
     singleNestedPaths: {}, 
     nested: {}, 
     inherits: {}, 
     callQueue: [Object], 
     _indexes: [], 
     methods: {}, 
     statics: {}, 
     tree: [Object], 
     _requiredpaths: undefined, 
     discriminatorMapping: undefined, 
     _indexedpaths: undefined, 
     query: {}, 
     childSchemas: [], 
     s: [Object], 
     options: [Object], 
     '$globalPluginsApplied': true }, 
    collection: 
     NativeCollection { 
     collection: null, 
     opts: [Object], 
     name: 'users', 
     collectionName: 'users', 
     conn: [Object], 
     queue: [], 
     buffer: true, 
     emitter: [Object] }, 
    Query: { [Function] base: [Object] }, 
    '$__insertMany': [Function], 
    insertMany: [Function] }, 
    schema: 
    Schema { 
    obj: 
     { name: [Function: String], 
     email: [Function: String], 
     passwordHash: [Function: String], 
     validation: [Function: String], 
     validationCode: [Function: String], 
     favorites: [Function: Array] }, 
    paths: 
     { name: [Object], 
     email: [Object], 
     passwordHash: [Object], 
     validation: [Object], 
     validationCode: [Object], 
     favorites: [Object], 
     _id: [Object], 
     __v: [Object] }, 
    subpaths: {}, 
    virtuals: { id: [Object] }, 
    singleNestedPaths: {}, 
    nested: {}, 
    inherits: {}, 
    callQueue: [ [Object], [Object], [Object], [Object] ], 
    _indexes: [], 
    methods: {}, 
    statics: {}, 
    tree: 
     { name: [Function: String], 
     email: [Function: String], 
     passwordHash: [Function: String], 
     validation: [Function: String], 
     validationCode: [Function: String], 
     favorites: [Function: Array], 
     _id: [Object], 
     id: [Object], 
     __v: [Function: Number] }, 
    _requiredpaths: undefined, 
    discriminatorMapping: undefined, 
    _indexedpaths: undefined, 
    query: {}, 
    childSchemas: [], 
    s: { hooks: [Object], kareemHooks: [Object] }, 
    options: 
     { retainKeyOrder: false, 
     typeKey: 'type', 
     id: true, 
     noVirtualId: false, 
     _id: true, 
     noId: false, 
     validateBeforeSave: true, 
     read: null, 
     shardKey: null, 
     autoIndex: null, 
     minimize: true, 
     discriminatorKey: '__t', 
     versionKey: '__v', 
     capped: false, 
     bufferCommands: true, 
     strict: true, 
     pluralization: true }, 
    '$globalPluginsApplied': true }, 
    op: 'findOne', 
    options: { retainKeyOrder: false }, 
    _conditions: { email: '[email protected]' }, 
    _fields: undefined, 
    _update: undefined, 
    _path: undefined, 
    _distinct: undefined, 
    _collection: 
    NodeCollection { 
    collection: 
     NativeCollection { 
     collection: null, 
     opts: [Object], 
     name: 'users', 
     collectionName: 'users', 
     conn: [Object], 
     queue: [], 
     buffer: true, 
     emitter: [Object] }, 
    collectionName: 'users' }, 
    _traceFunction: undefined, 
    _castError: null, 
    _count: [Function], 
    _execUpdate: [Function], 
    _find: [Function], 
    _findOne: [Function], 
    _findOneAndRemove: [Function], 
    _findOneAndUpdate: [Function] } 

數據,這似乎是我試圖運行查詢的概述和不結果表示查詢

回答

1

試試這個:

const User = mongoose.model('User', {name: String, email: String, passwordHash: String, validation: String, validationCode: String, favorites: Array }) 


exports.findUser = function findUser(email, callback){ 
    User.findOne({email: email}, function(err, userObj){ 
     if(err){ 
      return callback(err); 
     } else if (userObj){ 
      return callback(null,userObj); 
     } else { 
      return callback(); 
     } 
    }); 
} 

當您執行User.findOne,貓鼬調用的MongoDB和回調(在你的findOne功能最後PARAM)回報您的用戶,這樣可以返回找到用戶調用回調。

要調用findUser功能,你需要傳遞一個回調,這樣的事情:

findUser('[email protected]', function(error, userFound) { 
    console.log(userFound); 
}); 

你可以找到更多詳細的貓鼬findOne here並瞭解回調函數,你可以去看看here

+0

該死的9秒快:d – xShirase

+0

哈哈哈,比賽條件:P – danilodeveloper

+0

@xhihirase,最有趣的是我們的答案非常相似。哈哈 – danilodeveloper

0

你所看到的是一個Mongoose查詢對象return foundUser的結果。

你混合同步和異步代碼,你必須等待被執行您的查詢,回調調用它的功能,像這樣:

const User = mongoose.model('User', {name: String, email: String, passwordHash: String, validation: String, validationCode: String, favorites: Array }); 

exports.findUser = function findUser(email,callback){ 
    const foundUser = User.findOne({email: email}, (err, userObj)=>{ 
     if(err){ 
      callback(err) 
     } else if (userObj){ 
      callback(null,userObj) 
     } else { 
      callback(new Error('Some strange thing has happened)); 
     } 
    }); 
} 

你再打電話給你的函數是這樣的:

findUser((err,user)=>{ 
    if(err) console.log(err); 
    console.log(user) 
}); 

對於一個快速介紹到回調,這是鏈接到開始What is a callback function?