【问题标题】:Exclude virtual fields排除虚拟字段
【发布时间】:2019-03-29 10:20:29
【问题描述】:

我有一个虚拟字段fullname

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

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

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

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

【问题讨论】:

    标签: node.js mongoose mongoose-populate


    【解决方案1】:

    尝试在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;
       });
    

    【讨论】:

    • 对我不起作用。可能是因为我在我的模型中将toObjecttoJSON 设置为{virtuals: true}
    • 是的,如果你在toObjecttoJSON 中设置它们,据我所知,它们不能被省略,我已经更新了我的答案,也许它会解决问题
    • 好的,这似乎基本可行。但是这样,如果我想排除一个虚拟字段,我必须排除所有虚拟字段。有没有办法排除一个并包含另一个?
    • 我猜你可以在查询文档后删除它们,更新我的答案
    • 这似乎可行,谢谢。我会稍等片刻再接受,看看是否有其他意见。
    猜你喜欢
    • 2018-10-22
    • 2014-03-15
    • 2012-11-07
    • 2022-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-13
    • 2015-02-04
    相关资源
    最近更新 更多