2014-10-29 67 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