2017-06-18 48 views
0

我正在嘗試查找與node.js中的自定義字段匹配的所有文檔。如何使用MongoDB查找與自定義字段相匹配的文檔?

的Node.js代碼:

req.app.db.models.Property.find({ 
    user: { 
    id: req.params.id 
    } 
}).exec(function(err, user) { 
    if (err) { 
    return next(err); 
    } 
    console.log("id:" + req.params.id); 
    console.log("user:" + user); 
    res.status(200).json(user); 
}); 

但是,控制檯這樣表示

id:5941cfc42df14b2fe811d531 
user: 

和架構是類似下面

user: { 
     id: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }, 
     name: { type: String, default: '' }, 
     email: { type: String, defaul: ''} 
    }, 
propertyType: { type: String, default: '' }, 
    .......... 
    } 

它似乎可以」找到文件。 這有什麼問題? Property Collection上有幾個文件。

+0

'.find({「user.id」:req.params.id})'。使用'{「user」:{「id」:req.params.id}}'正在尋找除「id」屬性之外的「用戶」鍵下沒有「其他」的文檔。這當然是不正確的,因爲它與模式不一致。請參閱核心文檔中的[「點符號」](https://docs.mongodb.com/manual/core/document/#embedded-documents)。 –

+0

嗨尼爾。我剛剛用.find({「user.id」:req.params.id})檢出了它,現在它正在工作。你能提供它作爲答案嗎? –

回答

0

問題出在您的查詢中,它發現用戶只有一個對象ID。 所以你實際上等同於「user」和「{id:req.params.id}」,它只返回id參數。因此,對於您的解決方案,請執行以下操作:

var query = {'user.id':req.params.id} 
Property.find(query).exec(function(err, user) { 
    if (err) { 
    return next(err); 
    } 

如果要指定返回對象的類型(如果找到)。 可以按如下方式提到它:

Property.find(query,'user.id user.name').exec(...) 

這將返回一個對象,具有用戶ID和電子郵件,而不是名字。

相關問題