排除虚拟字段

时间:2018-10-24 22:03:13

标签: node.js mongoose mongoose-populate

我有一个虚拟字段fullname

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

有时,我希望在查询结果中使用此字段,有时却不需要。我还没有弄清楚如何排除它。这是我尝试过的(什么都没做):

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

我应该以其他方式处理吗?

1 个答案:

答案 0 :(得分:1)

尝试在toJSONtoObject中禁用虚拟机,并将其包含在所需的查询中

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

如果要排除特定字段,则可以在发送文档之前将其删除。

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