当使用Mongoose并查询数据库时,默认选择所有字段,我必须明确告诉Mongoose我不想选择哪些字段,例如,如果我不想要字段user
我应该做:
var schema = new Schema(
{
insertedAt: {type: String},
tags: {type: String},
user: {type:Object, select:false},
connectedIds: {type:Array}
}
问题是,如果没有API开发人员(我)了解它,可能会将字段添加到数据库中。
是否可以告诉Mongoose仅选择选择明确设置的字段?
答案 0 :(得分:5)
解决方法是始终只选择Schema
中定义的字段。您需要做的是获取具有架构paths
属性的所有字段,并将其传递给您的select()
语句,如:
var fields = Object.keys(yourSchema.paths).join(' ');
//and when execute a query
YourModel.find({}).select(fields).exec(callback);
这样,即使有人在你的对象中添加了一个新字段,它也永远不会被显示出来。缺点是您必须为每个查询执行此操作。