2016-03-02 94 views
1

如何通過使用貓鼬的'findOne'/'find'功能,我可以找到一個特定的文檔,其結果是通過一個虛擬的字段來過濾的,而虛擬的字段在物理上並沒有出現在數據庫中?如何查找MongoDB文檔,通過貓鼬虛擬字段查詢?

我會嘗試進一步解釋:

在我的「用戶」的模式,我有一個名爲「電子郵件」字段。我想爲我的nodejs應用程序中的其他功能(主要是登錄驗證和內容)創建'email'的別名作爲'userkey'。

要創建別名,我這樣做:

userSchema.virtual('userkey').get(function() 
{ 
    return this.email; 
}); 

現在,我創建的別名後,我想我過濾搜索結果的方式如下:

restApi.post('/login', function (req, res) // (using expressjs) 
{ 
    User.findOne({'userkey': req.body.userkey}).exec(..); 
} 

哪有我有效地做到了這一點,並且沒有創建更多的方法\領域等來節省時間和內存?

別名非常重要,因爲在未來的應用程序中,我將添加更多登錄方式,並且希望能夠快速切換與'userkey'關聯的字段。這個別名節省了改變整個應用程序的麻煩(這是一個巨大的編程原則),並且可以幫助我添加更多將來需要的邏輯。

回答

0

你不能。

虛擬文件不存在於存儲在mongodb中的文檔中,所以沒有什麼可以查詢的。

+0

哦,是否有一個我可以實現的已知解決方法?或者至少有另一種方法來爲字段創建別名? –

+0

只有當您將值存儲在文檔中時... – Alex

+1

好的謝謝。我會標記這個答案,因爲我只能假設除此之外別無他法。 –