我正在考虑使用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
答案 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
}