2014-10-29 97 views
1

我試圖找到對另一個架構的引用並更新同級字段。具體來說,我試圖根據特定的「調查」ObjectId操縱下面的hasResponded字段。使用貓鼬findbyid和更新同級

我的模式是這樣的:

var userSchema = new mongoose.Schema({ 

    // some other stuff 

    surveys: [{ 
     survey: { 
      type: mongoose.Schema.Types.ObjectId, 
      ref: 'Survey' 
     }, 
     hasResponded: { 
      type: Boolean, 
      default: false 
     } 
    }] 

}); 
+1

所以你基本上要求如何找到所有在他們的調查數組中有特定調查ID的用戶? (然後更新其對應的hasResponded字段?) – Protostome 2014-10-29 13:09:55

+0

在這種情況下,只有一個用戶,但我也有興趣爲所有具有特定調查ID的用戶更新類似的字段。 – 2014-10-29 13:17:19

+0

看到我的答案.... – Protostome 2014-10-29 13:20:21

回答

0

如果你有一個調查ID,只需搜索所有具有陣列在這一特定的ID的用戶。 類似的東西:

Users.find({surveys: { "$elemMatch": { type: <ID> } } }); 

然後,通過用戶和其相應的調查陣列遍歷查找匹配你給的ID的人。

不得不說我會構造這個數據庫有點不同,如果這個查詢經常發生。

創建一個新的Schema - UserSurveys,其中包含用戶的id和survey + hasResponded。像這樣:

var UserSurveySchema = new mongoose.Schema({ 
    user_id: {type: mongoose.Schema.Types.ObjectId, ref: 'User'}, 
    survey_id: {type: mongoose.Schema.Types.ObjectId, ref: 'Survey'} 
    hasResponded: {type:Boolean, 'default':false} 
    ... 
}); 

您可能還想保留用戶和測量ID的索引。
然後,更新域會容易得多,請求將花費更短的時間。

希望這會有所幫助。

+0

有趣。是的,它確實如此。非常感謝。我會按照你的建議製作一個新的模式。 – 2014-10-29 13:26:05

+0

更新:用新的UserSurvey架構重構事物,它的工作得很好。再次感謝。 – 2014-10-29 17:45:38