[英]Mongoose Populate - how can you dynamically or programmatic perform field selection
我有一個查詢1,它返回記錄數組,比方說activitySchema中的activityList。 現在,在這個activityList數組上,我試圖使用填充來填充用戶信息。 我想根據某些活動類型動態選擇字段。 這是我的架構,因為每個子文檔都有許多字段。
var activitySchema = new Schema({
userId: {type: Schema.Types.ObjectId, ref: 'users'}
, updateDt: {type: Date, Default: Date.now()}
, activityType: String
, weight: Number
, activityAttributes: [String]
});
用戶架構有很多子文檔,例如
var userSchema = new Schema({
auth: authSchema
, membership: membershipSchema
, personal: personalSchema
, location: locationSchema
, religion: religionSchema});
根據活動類型的值,假設“ PERSONAL”,“ LOCATION”和“ RELIGION”填充僅應返回這些值。
抱歉,無法使用您擁有的架構。
您可以查詢activitySchema對象,檢查activityType,然后查詢userSchema以根據活動類型僅選擇所需的字段:PERSONAL,LOCATION,RELIGION。 因此,您可以繼續執行兩個查詢,而不是一個。
您也可以使用填充來獲取所有內容,然后在javascript中過濾掉不需要的道具。 您仍然需要通過網絡將所有這些數據發送到您的調用代碼。 但是,如果上面的代碼將數據轉移到其他地方(例如瀏覽器),則可能會節省一些帶寬。
在不了解您要完成的工作的更多信息的情況下,我無法為您提供更好的數據建模方法的建議。 可能需要考慮分解userSchema。 毫無疑問,如果您投入時間,就可以擁有一個數據模型,使您一目了然。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.