簡體   English   中英

貓鼬填充-如何動態或以編程方式執行字段選擇

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM