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 に答える