2015-07-11 49 views
0

我有一個providerData對象貓鼬模式:點標記不是貓鼬模式

... , providerData: {}, ... 

,我想查詢基於providerData對象物體的ID文件。

所以我認爲我將不得不使用點符號,像這樣:

User.findOne({ providerIDString: providerID }, function(err, user) {...}); 

其中

providerIDString is a string like 'providerData.facebook.id' 
    providerID is the providerData.facebook id 

但是查詢保持返回任何結果,即使

db.users.find({"providerData.facebook.id":"THEFACEBOOKID"}) 

mongodb shell返回正確的文件

我是否正確地認爲這是因爲providerData.facebookproviderData.facebook.id未在用戶架構中定義?

這是否意味着我必須將它們添加到模式中,或者有沒有一種方法可以在不在貓鼬模式中的嵌套對象上使用點符號?

+0

顯示您希望匹配的文檔。以及您實際使用的完整查詢。這將比你在這裏解釋的嘗試更清晰。 –

回答

4

我猜測,你有一個像輸入:

var providerIdString = 'providerData.facebook.id', 
    facebookId = "THEFACEBOOKID"; 

在這種情況下,你使用:

var query = {}; 
query[provoderIdString] = facebookId; 

然後:

db.users.find(query); 

看哪!有用。

這就是你如何從JavaScript中的變量名構造對象。

+0

哇謝謝..我很愚蠢 – Jaysbays

+0

括號'[]'表示法是你如何處理變量名和其他不符合JavaScript對象表示法的「文本」。當你完成時,哦,[接受](http://stackoverflow.com/help/accepted-answer)。 –