我需要在Mongo中檢查兩個單獨的集合以查看是否存在電話號碼。嵌套查詢兩個不同集合的奇怪結果
我首先創建了一個名爲全局變量「OWNERID」
然後我看着一個集合呼叫「資料」。如果我傳遞的電子郵件值存在於該集合中文檔的「電子郵件」數組中,則填寫我在該文檔中創建的名爲'owner_id'的'ownerId'變量。
我再看看在所謂的「用戶」另一個集合,其中有一個電子郵件字段。如果我傳遞的電子郵件值存在於該集合中的某個文檔中,則填充使用該文檔的_id標識創建的'ownerId'變量。
我有我的查詢嵌套在幾個'then()'語句。
這裏是我的代碼:
Profile.findOne({'emails.email_address':req.body.invited_email}, function(err, result){
if(result)
ownerId = result.owner_id;
}).then(function(){
User.findOne({'email':req.body.invited_email}, function(err, result2){
if(ownerId !== null)
ownerId = result2._id;
})
}).then(function(){
console.log(' --------------- THIS IS AN EXISTING EMAIL OWNER ID: ' + ownerId);
})
結果是不是如我所料。
如果「個人資料」的查詢是真實的,找到一個匹配,那麼它將控制檯和值日誌OWNERID。
如果第二個「用戶」查詢是真實的,但沒有匹配的「個人資料」,將控制檯登錄「空」。我期望它能夠控制登錄用戶結果的_id值。
任何人都可以看到我的邏輯錯誤?
感謝您的答覆米卡,但我得到了以下控制檯錯誤:讓輪廓=等待Profile.findOne({「emails.email_address」:req.body.invited_email}); ^^^^^^^ 語法錯誤:意外的標識 – cnak2
在貓鼬4.x的不是。那麼意味着處理的承諾,所以你不需要任何額外的工作,用貓鼬與異步()函數/等待? – cnak2
它是在抱怨等待嗎?很難看到代碼粘貼到註釋中時箭頭指向的位置。您需要節點的版本7.6或更高版本以進行異步/等待。如果可以的話,你應該升級到最新版本。然後和異步/等待使用承諾,等待只是讓它更容易。 – MikaS