我们说我有以下架构
Schema = {
field1: String, //secret
field2: String, //public
field3: String, //secret
field4: String, //secret
field5: String, //public
field6: String, //secret
...
field45: String, //public
}
我想只提取公众'我的文件中的字段。 我显然可以在我的查询中询问特定字段,但是有很多字段,我试图找出是否有方法来标记"秘密字段,只获取非秘密字段。
类似的东西:
Schema = {
field1: {type:String, flag:true}, //secret
field2: {type:String, flag:false}, //public
field3: {type:String, flag:true}, //secret
field4: {type:String, flag:true}, //secret
field5: {type:String, flag:false}, //public
field6: {type:String, flag:true}, //secret
...
field45: {type:String, flag:false} //public
}
我知道我可以将字段分成两个不同的模式:一个是公共字段,另一个是秘密字段,但是在项目的这一点上,这很不实际。
问题2: 如果在查询数据库时有一种选择性获取的方法,当获取的文档是填充文档中的引用子文档时,是否有办法执行类似的操作?
谢谢!
答案 0 :(得分:0)
我认为您不应该使用json架构。
为此,请尝试不使用动态字段,而是使用对象:
schema : [
{
"name" : "field1",
"type" : "String",
"flag" : true
}
]
因此,您可以通过标志选择它:
db.your_collection.find({"schema.flag": true})
答案 1 :(得分:0)
使用猫鼬,您可以使用select
字段。来自mongoose doc:
select:{Boolean} - 指定默认路径选择行为。在 换句话说,您可以指定是否应包含此路径或 默认情况下从查询结果中排除。
因此:
new Schema({
field1: { type: String, select: true }, // select: true is optional
field2: { type: String, select: false },
...
})
您仍然可以使用.find({}, { field2: 1 })
或.find({}).select('+field2')