Node.js 排除虚拟字段

Node.js 排除虚拟字段,node.js,mongoose,mongoose-populate,Node.js,Mongoose,Mongoose Populate,我有一个虚拟字段全名: UserSchema.virtual('fullname').get(function() { return this.firstName + ' ' + this.lastName; }); 有时我希望在查询结果中包含此字段,有时则不需要。我还没有弄清楚如何排除它。这是我尝试过的(没有改变任何东西): 我是否应该以其他方式处理此问题?尝试在toJSON和toObject中禁用虚拟对象,并将它们包含在所需的查询中 UserModel.findOne({ _id:

我有一个虚拟字段
全名

UserSchema.virtual('fullname').get(function() {  
  return this.firstName + ' ' + this.lastName;
});
有时我希望在查询结果中包含此字段,有时则不需要。我还没有弄清楚如何排除它。这是我尝试过的(没有改变任何东西):


我是否应该以其他方式处理此问题?

尝试在
toJSON
toObject
中禁用虚拟对象,并将它们包含在所需的查询中

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;
   });

不适合我。可能是因为我在我的模型中将
toObject
toJSON
设置为
{virtuals:true}
?是的,如果你在
toObject
toJSON
中设置它们,就我所知,它们不能被使用,我已经更新了我的答案,也许它会解决问题好,这看起来基本上是可行的。但这样,如果我想排除一个虚拟字段,我必须排除所有虚拟字段。有没有办法排除其中一个而包括另一个?我想你可以在查询完文档后删除它们,更新我的答案。这似乎有效,谢谢。我会等一会儿再接受,看看是否还有其他意见。
UserModel.findOne({ _id: userId })
   .then(doc => doc.toObject({ virtuals: true }))
   .then(doc => {
     delete doc.mySecretVirtual;
     return doc;
   });