批量获取文档的特定字段

时间:2016-05-02 05:29:27

标签: mongodb mongoose

我们说我有以下架构

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: 如果在查询数据库时有一种选择性获取的方法,当获取的文档是填充文档中的引用子文档时,是否有办法执行类似的操作?

谢谢!

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')

访问它