将 select: false 设置为 mongoose 的子文档数组
Posted
技术标签:
【中文标题】将 select: false 设置为 mongoose 的子文档数组【英文标题】:Set select: false to subdocuments array at mongoose 【发布时间】:2014-02-26 09:05:04 【问题描述】:在 mongoose 上有一个不错的选项,默认使用 select: false
选项从查询中删除一些字段。
例如:
var FileSchema = new Schema(
filename: String,
filesize: Number,
base64Content: type: String, select:false
);
[...]
FileModel.find(, function(err, docs)
// docs will give me an array of files without theirs content
);
现在,如何对子文档数组的字段使用相同的选项?
(即在以下示例中,将select: false
设置为comments
字段)
var PostSchema = new Schema(
user: ObjectId,
content: String,
createdAt: Date,
comments: [
user: ObjectId,
content: String,
createdAt: Date
]
);
[...]
FileModel.find(, function(err, docs)
// docs will give me an array of files without theirs content
);
【问题讨论】:
【参考方案1】:先尝试创建一个 CommentSchema,
var CommentSchema = new Schema(
user: ObjectId,
content: String
//whatever else
);
然后在你的 PostSchema 中指定
comments: type: [CommentSchema], select:false
【讨论】:
【参考方案2】:你可以这样做:
comments: type: Array, default: [], select: false
但是你会丢失下面声明的结构,否则真的有什么问题:
comments: [
user: type: ObjectId, select: false ,
content: type: String, select: false
createdAt: type: Date, select: false
]
这可能看起来有点简洁,但可能有人认为它是明智的。
【讨论】:
第二个选项在大多数情况下没有用。当你想选择整个数组时会发生什么?我想你应该分别选择每个字段 - 这是一个糟糕的设计.. 不像我解释的文档那样。是的,它看起来代码很难看,但是通过快速的谷歌搜索,您尝试使用这些设置获取整个数组,整个数组将被省略。除非你明确要求。以上是关于将 select: false 设置为 mongoose 的子文档数组的主要内容,如果未能解决你的问题,请参考以下文章