2017-09-02 59 views
0

我在mongo數據庫中有一個用戶集合,它有一個公司字段,它是對另一個名爲Company的集合的引用。 我將該公司分配給用戶。當我嘗試打印公司領域內的數據時,它返回我:未定義。NodeJs/Mongoose - 無法從對象ID中找到數據

這是我使用的代碼,

console.log('company: ' + req.user.company); 
if(req.user.company) 
    console.log("LOGGED IN USER" + "\n Email:" + req.user.username + "\n Psw: " + req.user.password + "\n Role: " + req.user.role + "\n Company: " + req.user.company.name); 

,這是在終端上的應答:

company: 59aab09745db5532c4321742 
LOGGED IN USER 
Email:[email protected] 
Psw: $2a$10$Z7h3ikaDJLhLXMotV.odaerGf5RFRXxDmlVxCFdvTaL48WalNIwRy 
Role: admin 
Company: undefined 

,你可以看到第一端子線示出了分配給該公司ID特定的用戶,但是當我嘗試打印該公司的名稱時,它返回未定義。

這是該公司的集合項,它的名稱是場爲我打印上面

image

我在哪裏錯了對象ID是一樣的嗎? 如果您需要更多信息,請讓我知道 謝謝

+0

*「我在哪裏錯了?」*我們怎麼知道?這裏沒有執行查詢的代碼。這實際上是您需要向我們展示的唯一代碼,它甚至不在此處。\ –

+0

@NeilLunn如果您注意,他正在打印'req.user.company',它顯示爲ObjectId,而不是對象本身。他沒有填充該領域。我認爲這很明顯,即使代碼不明確。 – lilezek

+0

你的評論說:'在這裏,因爲如果這是一個缺少「填充」的問題,那麼字段參考值將在那裏,而不是未定義。它在那裏,看看他的代碼'公司:59aab09745db5532c4321742'。你是盲人還是隻是傾斜? – lilezek

回答

1

您必須填寫公司。

http://mongoosejs.com/docs/populate.html

當您打印:

console.log('company: ' + req.user.company); 

它顯示:

company: 59aab09745db5532c4321742 

所以你req.user.company是不是你期望得到的對象,但在該_id的字符串目的。所以它必須填充。

當你使用類似User.findOne({...})你必須追加人口是這樣的:

User.findOne({...}).populate("company"); 

對象引用存儲爲包含引用文件的的ObjectId字符串。如果你想引用不是字符串,而是它所引用的對象,你必須這樣做。

+0

只要注意他的代碼。他印刷公司,是一個字符串,而不是一個對象。這是不填充該字段的明顯問題。我不認爲我的假設有什麼問題。未定義不是'req.user.company'的值,而是'req.user.company.whatever'的值,因爲'req.user.company'是一個字符串。 – lilezek

+0

@NeilLunn因爲你不明白我的觀點,而你沒有看到你錯了,所以你做了一個倒行逆施。熱鬧。 – lilezek

+0

我給你一個downvote,因爲'undefined'只是參考輸入值沒有被定義的結果。與填充沒有任何關係,也沒有試圖在問題中顯示「查詢」。無知和壞態度真的只是獎勵的原因 –