排除虚拟字段

Exclude virtual fields

我有一个虚拟字段fullname:

UserSchema.virtual('fullname').get(function() {  
  return this.firstName + ' ' + this.lastName;
});

有时我希望在查询结果中包含此字段,有时又不需要。我还没有想出如何排除它。这是我尝试过的(没有改变任何东西):

UserModel.findOne({ '_id': userId })
  .select('-fullname')
  .exec(callback);

我应该以其他方式解决这个问题吗?

尝试在 toJSONtoObject 中禁用虚拟,并将它们包含在您想要的查询中

UserModel.findOne({ _id: userId })
   .then(doc => console.log(doc.toObject({ virtuals: true }));

如果您想排除特定字段,您可以在发送文档之前删除它们。

UserModel.findOne({ _id: userId })
   .then(doc => doc.toObject({ virtuals: true }))
   .then(doc => {
     delete doc.mySecretVirtual;
     return doc;
   });