2017-04-16 147 views
0

我目前正在使用mongodb/mongoose進行一個項目,每次我故意查詢DB中不存在的內容時,我都會收到一個空數組的響應。這是我用快遞建立的API,並返回在數據庫中找到的數據代碼:MongoDB/Mongoose返回空數組

app.get('/api/:id', function(req, res) { 
var id = req.params.id; 
Job.find({jobID: id}, function (err, foundJob) { 
    if (err) { 
     console.log(err); 
    } 
    else { 
     res.json(foundJob); 
    } 
    }); 
}); 

然而,我每次去爲localhost:3000/API/67(我有作業ID沒有對象: 67在數據庫中),控制檯不打印錯誤。它給了我一個空數組的JSON響應。任何想法爲什麼發生這種情況?奇怪的是,當我將jobID: id更改爲_id: id時,它確實給了我一個錯誤。爲什麼不這樣做jobID字段?

編輯:只是爲了澄清,我不希望這種行爲的原因是因爲我的程序將永遠不會打印錯誤,即使我的數據庫中的作業不存在與指定的jobID。

回答

0

關於錯誤,當你試圖找到它的__id的東西:它給你一個錯誤,因爲__id不是字符串,它的ObjectId。所以,你應該尋找文件與__id這樣的:_id: ObjectId(id)


關於空字符串:如果你想顯示某種不同的消息,你應該檢查是否DB返回的東西或者是它得到了返回而空字符串。這樣的事情:

app.get('/api/:id', function(req, res) { 
var id = req.params.id; 
Job.find({jobID: id}, function (err, foundJob) { 
    if(foundJob){ 
     res.json(foundJob); 
    }else{ 
     res.json("nothing found"); 
    } 
if (err) { 
     console.log(err); 
    } 
    }); 
}); 

編輯:我沒有意識到,你檢查錯誤,我改變了代碼。

+0

這產生了和以前相同的結果:/ – calviners

+0

@calviners我編輯了代碼,現在就試試。 – someRandomSerbianGuy

+0

@calviners我第三次編輯它。這應該工作100%。 – someRandomSerbianGuy

1

它做的事情與你認爲的不同。

Job.find({jobID: id}, ...) 

這究竟說的是給我陣列都在收集"Job"有場"jobID"等於某個值文件。

如果沒有這樣的文件會怎麼樣?那麼,數組將是空的。當然,沒有任何錯誤,這裏應該是錯誤的?您要求提供所有文檔(給定一些過濾器),並返回包含所有這些文檔的數組。數組的大小是零,這只是一個巧合,因爲沒有這樣的文檔。

如果你想檢查是否沒有這樣的文件,然後檢查數組是否爲空。

我不知道爲什麼當你將JobID更改爲_id時給你錯誤;究竟是什麼錯誤?

如果您只對一個文檔感興趣,則存在方法findOne,該方法僅返回第一個文檔(如果不存在此類文檔,則返回null)而不是數組。

+0

謝謝!你的解釋讓我更瞭解它,然後我添加了這個條件語句來解決它:else if(!res.length)console.log(「Nothing found」); } – calviners

0

返回空字符串是貓鼬的正常行爲。您應該如下處理您的回覆:

if (err) { 
    //handle error 
} else if (foundJob) { 
    //work with your data 
} else { 
    //nothing was found 
} 

您使用_id得到的錯誤必須是無關緊要的,可能是由於無效查詢造成的。

+0

這不起作用:/相同的結果 – calviners

+0

通過說相同的結果你到底什麼意思?即使你的數組​​是空的,你是否進入了else if(foundJob){}? – itsundefined