2013-01-12 24 views
0

在此先感謝您的幫助,非常感謝!在Node.js中使用Mongoose在MongoDB中查找文檔時發生奇怪的響應

我在一個新項目中使用Node.js,MongoDB和Mongoose,我只是試圖在數據庫中的find()文件。爲了簡便起見我就包括下面的代碼貓鼬(我不這樣做的遠不止反正現在):

var mongoose = require('mongoose'); 

mongoose.connect('mongodb://<username>:<password>@<sub-domain>.mongolab.com:<port>/<db>'); 

var schema = { email_address: String, invite: String } 
    , Users = mongoose.model('Users', new mongoose.Schema(schema)); 

console.log(Users.findOne({ 'email_address': '[email protected]' }, function(err, doc) { return doc; })); 

我敢肯定那應該只是回聲返回doc到的Node.js控制檯(終端),而是我得到這個:

{ options: { populate: {} }, 
    safe: undefined, 
    _conditions: { email_address: '[email protected]' }, 
    _updateArg: {}, 
    _fields: undefined, 
    op: 'findOne', 
    model: 
    { [Function: model] 
    modelName: 'Users', 
    model: [Function: model], 
    options: undefined, 
    db: 
     { base: [Object], 
     collections: [Object], 
     models: {}, 
     replica: false, 
     hosts: null, 
     host: '<sub-domain>.mongolab.com', 
     port: <port>, 
     user: '<username>', 
     pass: '<password>', 
     name: '<db>', 
     options: [Object], 
     _readyState: 2, 
     _closeCalled: false, 
     _hasOpened: false, 
     db: [Object] }, 
    schema: 
     { paths: [Object], 
     subpaths: {}, 
     virtuals: [Object], 
     nested: {}, 
     inherits: {}, 
     callQueue: [], 
     _indexes: [], 
     methods: {}, 
     statics: {}, 
     tree: [Object], 
     _requiredpaths: undefined, 
     options: [Object] }, 
    collection: 
     { collection: null, 
     name: 'users', 
     conn: [Object], 
     buffer: true, 
     queue: [Object], 
     opts: {} }, 
    base: 
     { connections: [Object], 
     plugins: [], 
     models: [Object], 
     modelSchemas: [Object], 
     options: {}, 
     Collection: [Function: NativeCollection], 
     Connection: [Function: NativeConnection], 
     version: '3.5.4', 
     Mongoose: [Function: Mongoose], 
     Schema: [Object], 
     SchemaType: [Object], 
     SchemaTypes: [Object], 
     VirtualType: [Function: VirtualType], 
     Types: [Object], 
     Query: [Object], 
     Promise: [Function: Promise], 
     Model: [Object], 
     Document: [Object], 
     Error: [Object], 
     mongo: [Object] } } } 

顯然,我只是模糊我的真實憑證與<username>位,他們是在我的代碼正確的。

數據庫確實有一個文檔可以匹配條件,即使從findOne方法中刪除條件也不會產生任何結果!

我對Node.js相當陌生,所以我可以解釋你的答案,所以我知道下次它會是一個很好的幫助!謝謝!

回答

1

我完全忘了,Node.js是異步的,所以行console.log(Users.findOne({ 'email_address': '[email protected]' }, function(err, doc) { return doc; }));確實迴應到控制檯,儘管沒有文檔已經被數據庫返回了!

取而代之的是console.log方法應該是find的回調,一拉內:

Users.find({}, function(err, doc) { console.log(doc); }); 
3

你的代碼更改爲:

Users.findOne({ 'email_address': '[email protected]' }, function(err, doc) { 
console.log(doc); 
}); 

我無法從你的代碼中看到的,但我認爲你正在寫的貓鼬功能到控制檯的價值...

相關問題