使用Mongoose删除MongoDB字段

时间:2015-09-13 23:31:57

标签: mongodb mongoose

我正在考虑使用Mongoose ORM审查一些MongoDB字段的最佳方法。具有

const userSchema = new Schema({
  last_name: {
  type: String,
  select: false,
  }
});

userSchema.virtual('last_name_initial').get(function () {
  return this.last_name.substr(0,1).toUpperCase();
});

不会这样做,因为last_name设置为select: false,显然我不想发回last_name

1 个答案:

答案 0 :(得分:2)

在架构中的任何字段上指定s say element no. 10 with element no. 10 ( the same path ) but i resolved it by "if(i=j) continue ;" (i and j are the iterators ) My question is : if let时,默认情况下会在查询中排除该字段。因此,在这种情况下,您的虚拟字段将只处理已经查询过的对象:

{select: false}

如果您希望虚拟字段始终可用而不必明确包含要选择的字段,那么最好使用另一种方法而不是User.find().select('+last_name').exec(function (err, users) { //The virtual field should be available here. console.log(users[0].last_name_initial); });

默认情况下,您可以排除该字段的一种方法是覆盖{select: false}方法(source遇到与您相同的问题)

toJSON

注意:使用这种方法,您还应该为toJSON设置选项{virtuals:true}。

userSchema.methods.toJSON = function() {
  var obj = this.toObject()
  delete obj.last_name
  return obj
}