消毒更新参数
#编码 #node #express #mongoose

当您的功能允许您一起更新多个内容时,更新Mongoose集合中的记录是一件棘手的事情。假设您只想更新记录的5个关键值中的3个。这是一个简单的方法 -

const params = CampaignBatchProspectUtil.sanitiseParams({
  prospect: prospectId,
  campaignBatch: campaignBatchId,
  type,
  status: { $ne: CampaignBatchProspectStatus.REMOVED },
});

在上面的代码中,prospectIdcampaignBatchIdtype ast as as as aigation。如果我们通过上述任何一个传递零值,记录本身将使用我们不想要的空值进行更新。我们只需要更新的非挂钩属性。

这是在萨尼炎的功能中的照顾的 -

static sanitiseParams<T>(params: T): T {
  const sanitisedParams: Partial<T> = {};
  Object.keys(params).forEach((key) => {
    if (params[key] !== null) {
      sanitisedParams[key] = params[key as keyof T];
    }
  });

  return sanitisedParams as T;
}

我们使用了仿制药,以便在消毒后保存参数的类型。消毒函数仅返回非无效键和值。

然后可以将其传递到 -
之类的东西中

await CampaignBatchProspectRepository
.campaignBatchProspectDB
.findOneAndUpdate(
  filterParams, 
  params, 
  { new: true }
);

我们可以将sanitiseParams函数进一步移动到一个通用的util文件中,如果需要,可以在模块上使用。