2015-01-21 39 views
3

當使用Mongoose並查詢數據庫時,默認情況下所有字段都被選中,我必須明確告訴Mongoose哪些字段不想選擇,例如,如果我不想要現場user我應該做的:Mongoose只在Schema中選擇明確聲明的字段

var schema = new Schema(
    { 
    insertedAt: {type: String}, 
    tags: {type: String}, 
    user: {type:Object, select:false}, 
    connectedIds: {type:Array} 
    } 

的問題是,字段可能被添加到數據庫不知道關於它的API開發人員(我)。

是否可以告訴貓鼬只有選擇顯式設置的字段?

+1

mongo的默認查詢添加了一個字段,'projection'確實可以完成這項工作。用貓鼬來設置模式的投影是不可能的?架構的文檔可能會有所幫助。 http://mongoosejs.com/docs/api.html#schematype_SchemaType-select – 2015-01-21 11:07:51

回答

3

有一種解決方法,總是隻選擇Schema中定義的字段。你所要做的是讓各領域的架構paths屬性,並將其傳遞到您的select()語句,如:

var fields = Object.keys(yourSchema.paths).join(' '); 

//and when execute a query 
YourModel.find({}).select(fields).exec(callback); 

這樣一來,即使有人一個新字段添加到您的對象,它永遠不會被顯示。缺點是你必須爲每個查詢都這樣做。