如何不选择架构中未定义的字段?

时间:2018-07-06 06:18:00

标签: node.js mongodb mongoose

我想对两个模式使用一个集合 例如: 数据库中的文档:

{
  "name":"John",
  "position":"CEO"
}

模式User

{
  "name" : String
}

模式Employee

{
  "name" : String,
  "position" : String
}

尽管如此,当在结果中选择一个用户(User.findById())时,我仍然可以看到文档中的所有字段,即使未在架构中定义。 我根本不想透露简化模型中的某些字段,因此select: false并不是我想要的…… 另外,我想防止保存任何未在架构中列出的字段。

是否可以通过这种方式定义模式?

或者我错了,select:false正是我想要的? :-)

我正在使用Mongoose 5.0.14,但是如果有帮助的话,更新到最新版本也不是问题。

我看到了问题How to select a single field in MongoDB?,但是我希望ODM替我做这个。

2 个答案:

答案 0 :(得分:0)

尝试一下。 :)

var fields = Object.keys(yourSchema.paths).join(' ');

//and when execute a query
User.find({}).select(fields).exec(callback);

答案 1 :(得分:0)

在您的模式中尝试

 MySchema.pre('find', function() {
    this.select(fileds);
});