3

在 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: falsecomments字段)

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
});
4

2 回答 2

6

尝试先创建一个 CommentSchema,

var CommentSchema = new Schema({
  user: ObjectId,
  content: String
  //whatever else
});

然后在您的 PostSchema 中指定

comments: { type: [CommentSchema], select:false}
于 2015-02-04T00:32:51.797 回答
0

那么你可以这样做:

comments: { type: Array, default: [], select: false }

但是您将丢失下面声明的结构,否则真正有问题的是:

comments: [{
    user: { type: ObjectId, select: false },
    content: { type: String, select: false }
    createdAt: { type: Date, select: false }
}]

这可能看起来有点简洁,但可能有人认为这是明智的。

于 2014-02-03T01:04:30.283 回答