4

ノード上のマングースに大量の配列を保存したい. これらの配列に一意の数値コレクションが含まれていることを確認したいと思います。ここに私のスキーマがあります:

var schema = new Schema({
    array: { type: [Number], unique: true, required: true }
});

うまくいきません。たとえば、いくつかの (一意と呼ぶ) 配列を持ついくつかの新しい db モデルを作成して保存します。

new Model({ array: [1,2] })
new Model({ array: [0,2] })

...これを引き起こします:

E11000 duplicate key error index: test2.modes.$array_1  dup key: { : 1 }

..したがって、「unique」は、配列全体が一意であると見なすのではなく、これらの配列内のすべてのインデックスの一意性をチェックしているようです。

これをワンステップで行う別の方法はありますか?または、配列が一意であることを確認するために、たとえば schema.pre('save', fn) 内でデータベースで検索を実行する必要がありますか?

4

1 に答える 1

4

わかりましたので、より良い方法の代わりに、保存フックと追加の文字列を使用して解決した方法を次に示します。

var schema = new Schema({
    array: { type: [Number], required: true }
    _arraySignature: { type: String, unique: true }
});

schema.pre('save', function(next) {
    this._arraySignature = this.array.join('.');
    next();
});

...しかし、これを行うことができるのは、配列がソートされ、同じ数が複数含まれることがなく、不変であることを知っているからです。それは少しばかげています。もっと良い方法があれば知りたいです。

于 2012-09-03T03:46:03.920 に答える