2012-09-25 78 views
4

我有這個貓鼬綱要。MongooseJS使用發現查找參考

var mongoose = require ('mongoose') 
    , dev  = require ('../db').dev(); 

var schema = new mongoose.Schema ({ 
    date: { 
    type: Date, 
    default: Date.now 
    }, 
    company: { 
    type: mongoose.Schema.Types.ObjectId, 
    ref: 'Company' 
    }, 
    questionnaire: { 
    type: mongoose.Schema.Types.ObjectId, 
    ref: 'Questionnaire' 
    } 
}); 

module.exports = dev.model ('Survey', schema); 

我只想找到具有特定公司ID的調查。我怎麼做?我想(我的快遞處理程序):

app.get ('/survey', function (req, res) { 
    Survey.find ({ company: req.query.company }).populate ('questionnaire').exec (function (err, surveys) { 
    return res.json (surveys); 
    }); 
}); 
+0

假設'req.query.company'是一個ObjectId字符串,這看起來很好。什麼沒有關於它的工作? – JohnnyHK

+0

這是正確的objectId。嘗試使用公司條件時,find會返回空數組。但沒有條件,返回整個集合。包括我一直在尋找的公司ID的文件。 –

+0

有些事情看起來不像。您正在搜索的文檔中的「公司」屬性是否可能實際上是字符串而不是數據庫中的ObjectId? – JohnnyHK

回答

6

在你最新的評論,你說,Surveys收集company字段實際上是一個字符串,而不是和的ObjectId和這就是爲什麼這不起作用。由於您的架構定義將company聲明爲ObjectId,因此Mongoose會將您的req.query.company值轉換爲ObjectId,然後查詢Surveys中的文檔,其company屬性是具有相同值的ObjectId。所以如果company是數據庫中的一個字符串,它將不匹配。

如果將Surveys中的company值更新爲ObjectId而不是字符串,那麼這將起作用。

+0

謝謝。工作。我只是困惑,填充工程無論哪種方式。 –

0

你試過'company._id

app.get ('/survey', function (req, res) { 
    Survey.find ({ 'company._id': req.query.company }).populate ('questionnaire').exec (function (err, surveys) { 
    return res.json (surveys); 
    }); 
}); 
+0

我沒有沒有,但我現在做了,它沒有工作,我喜歡這個主意,但我現在也嘗試'company.ref'等,但這些只是指定類型的對象的字段數據庫,而不是實際值。當我查看mongo CLI中的數據時,它看起來是一個字符串。 –