2017-08-02 41 views
0

我想保存我的name字段的较低版本,以便我可以在名称字段上执行高效的不区分大小写的搜索。由于我正在使用外部API,因此我还将未修改的响应对象存储到我的数据库中。使用猫鼬钩保存附加字段

我的问题:

我怎样才能挽救我name领域的下套管的版本,而无需修改API响应(我还是想保存新文档时的响应对象传递给我的模型)。

假人模型:

const userSchema = mongoose.Schema({ 
    name: { 
    type: String, 
    required: true, 
    index: true, 
    }, 
    name_lowercased: { 
    type: String, 
    required: true, 
    index: true, 
    } 
}) 

我认为这是可能的使用pre('save')post('save')挂钩,但我不知道我怎么能修改在钩保存文档。

回答

1

您可以使用预存钩保存名称字段的小写版本:

userSchema.pre('save', function(next) { 
    this.name_lowercased = this.name.toLowerCase(); 
    next(); 
}); 
+0

看来它不是为我工作。我认为这个钩子甚至没有被调用,可能是因为我使用了upsert?还有另一种方法吗? – kentor

+0

我相信pre-save钩子不会在更新方法上调用,所以您将需要使用'find()',然后更新name属性和'save()'。这应该然后运行预保存。 –