2

MongoDB、特に mongoose.js では、タプルを属性として使用できます。たとえば、MongoDB のドキュメントには、属性comments自体が属性を持つオブジェクトの配列であるこの例があります[{body: String, date: Date}]。わーい!

var blogSchema = new Schema({
  title:  String,
  author: String,
  body:   String,
  comments: [{ body: String, date: Date }],
  date: { type: Date, default: Date.now },
  hidden: Boolean,
  meta: {
    votes: Number,
    favs:  Number
  }
})

これを MongoDB に永続化すると、 の各インスタンスがblogSchema_id の独自の値 (例: 502efea0db22660000000002) を取得するだけでなく、 の個々の値がcomment独自の_idフィールドを取得します。

ほとんどの場合、私は気にしませんが、私のアプリでは、アナログ to にcommentsは数千の値が含まれる場合があります。それぞれが の独自の巨大な値を取得します_id

それを防ぐことはできますか?それらを個別に参照する必要はありません。それとも、心配するのをやめて、一意の識別子を愛することを学ぶ必要がありますか? 私は子供の頃に Vic20 と TRS80 をプログラミングして育ったので、メモリ/ストレージの浪費について過度に偏執的である可能性があります。

4

1 に答える 1

4

schema オプションを に_id設定すると、 を無効にできます。オプションを渡すには、オブジェクト リテラルを使用する代わりにスキーマのインスタンスを渡す必要があります。noIdtrue

// instead of this...
comments: [{ body: String, date: Date }]

// do this...
var commentSchema = new Schema({ body: String, date: Date }, { noId: true });
var blogSchema = new Schema({
  ..
  comments: [commentSchema]
})
于 2012-08-18T05:03:04.510 に答える