我有一个查询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”应仅返回这些值。
答案 0 :(得分:0)
对不起,无法使用您拥有的架构。
您可以查询activitySchema对象,检查activityType,然后查询userSchema以根据活动类型仅选择所需的字段:PERSONAL,LOCATION,RELIGION。因此,您可以继续执行两个查询,而不是一个。
您也可以使用填充来获取所有内容,然后在javascript中过滤掉不需要的道具。您仍然需要通过网络将所有这些数据发送到您的调用代码。但是,如果上面的代码将数据转移到其他地方(例如浏览器),也许可以节省一些带宽。
在不了解您要完成的工作的更多信息的情况下,我无法为您提供更好的数据建模方法的建议。可能需要考虑分解userSchema。毫无疑问,如果您投入时间,便可以拥有一个数据模型,使您一目了然。