猫鼬填充-如何动态或以编程方式执行字段选择

时间:2019-02-23 20:37:03

标签: javascript mongodb mongoose

我有一个查询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”应仅返回这些值。

1 个答案:

答案 0 :(得分:0)

对不起,无法使用您拥有的架构。

您可以查询activitySchema对象,检查activityType,然后查询userSchema以根据活动类型仅选择所需的字段:PERSONAL,LOCATION,RELIGION。因此,您可以继续执行两个查询,而不是一个。

您也可以使用填充来获取所有内容,然后在javascript中过滤掉不需要的道具。您仍然需要通过网络将所有这些数据发送到您的调用代码。但是,如果上面的代码将数据转移到其他地方(例如浏览器),也许可以节省一些带宽。

在不了解您要完成的工作的更多信息的情况下,我无法为您提供更好的数据建模方法的建议。可能需要考虑分解userSchema。毫无疑问,如果您投入时间,便可以拥有一个数据模型,使您一目了然。